深度学习:如何复现神经网络

ops/2024/11/23 9:18:48/

深度学习:如何复现神经网络

在这里插入图片描述

要复现图中展示的卷积神经网络(CNN),我们需详细了解和配置每层网络的功能与设计理由。以下将具体解释各层的配置以及设计选择的原因,确保网络设计的合理性与有效性。

详细的网络层配置与设计理由

输入层
  • 规格: 3x32x32,代表处理的是32x32像素的彩色图像,有3个颜色通道(RGB)。这是标准的图像输入尺寸,适合大多数基于图像的深度学习应用,特别是在较小的数据集如CIFAR-10上。
第一卷积层
  • 卷积核大小: 5x5,可以捕捉到图片中的小特征(如边缘和角落)。
  • 输出通道: 32,这意味着网络将从输入图像中学习32种不同的特征表示。
  • 填充: 2,为了保持输出特征图的空间尺寸与输入相同,从而不丢失边缘信息。
  • 激活函数: ReLU,用于引入非线性,帮助网络学习复杂的模式。
  • 设计理由: 第一层通常设计为能捕捉基本特征的层,使用较大的卷积核来获取更广泛的输入区域信息,并增加输出通道以捕捉多样的特征。
第一最大池化层
  • 核大小和步长: 2x2,步长通常与核大小相同,用于降低特征图的空间尺寸,减少计算量,并帮助抵抗输入的小幅度位移。
  • 设计理由: 池化层跟在卷积层后面,用于压缩数据和参数的数量,并减小过拟合的风险。
第二卷积层
  • 参数与第一卷积层相同,保持32个通道,这样可以在不过度增加计算负担的前提下,进一步分析由第一层检测到的特征。
  • 设计理由: 重复使用相同配置的卷积层可以深化特征的层次,提高特征提取的效果。
第二最大池化层
  • 配置与第一池化层相同,继续降低特征图的空间维度,并增强模型的抽象能力。
  • 设计理由: 继续压缩数据,准备更深层次的特征提取。
第三卷积层
  • 输出通道: 64,增加输出通道数,可以捕捉更复杂的特征。
  • 设计理由: 在网络的更深层次增加更多的通道,以便网络可以学习更复杂、更抽象的特征表示。
第三最大池化层
  • 配置与前两个池化层相同,进一步降低特征图尺寸,简化网络输出之前的计算需求。
  • 设计理由: 最后一次池化减少最终特征的空间尺寸,为全连接层处理准备。
展平操作
  • 功能: 将多维的卷积或池化输出转换成一维数组,以便作为全连接层的输入。
  • 设计理由: 展平是从卷积层到全连接层的桥梁,它将二维特征图转换为一维特征向量。
全连接层
  • 第一层: 输入来自展平后的1024维向量(由64个4x4的特征图展平得到),输出到64个神经元,这一转换通过全连接层学习特征的全局模式。
  • 第二层: 将64维的输出映射到10个输出类别,对应于分类任务中的类别数。
  • 设计理由: 全连接层在网络末端,用于根据提取的特征执行分类任务。

结合PyTorch代码实现

import torch
import torch.nn as nn
import torch.nn.functional as Fclass CustomCNN(nn.Module):def __init__(self):super(CustomCNN, self).__init__()# 初始化模块,继承nn.Module# 第一层:卷积层# 输入通道3(RGB图像),输出通道32,卷积核大小5x5,填充2# 使用填充2是为了保持图像尺寸不变,便于堆叠多层卷积self.layer1 = nn.Sequential(nn.Conv2d(3, 32, 5, padding=2),nn.ReLU(),  # ReLU激活函数增加非线性,有助于学习复杂模式nn.MaxPool2d(2, 2)  # 最大池化层,核大小2x2,步长2,用于降低特征图维度)# 第二层:卷积层# 保持相同的通道数32,卷积核大小5x5,填充2self.layer2 = nn.Sequential(nn.Conv2d(32, 32, 5, padding=2),nn.ReLU(),nn.MaxPool2d(2, 2))# 第三层:卷积层# 增加输出通道至64,以提高网络的学习能力self.layer3 = nn.Sequential(nn.Conv2d(32, 64, 5, padding=2),nn.ReLU(),nn.MaxPool2d(2, 2))# 全连接层# 展平后的数据大小为64*4*4,因为最后的特征图大小为4x4,通道数为64self.fc1 = nn.Linear(64 * 4 * 4, 64)  # 第一个全连接层,从1024维到64维self.fc2 = nn.Linear(64, 10)  # 第二个全连接层,从64维输出到10维,对应10个类别def forward(self, x):# 定义网络的前向传播路径x = self.layer1(x)  # 通过第一层卷积、ReLU和池化x = self.layer2(x)  # 通过第二层卷积、ReLU和池化x = self.layer3(x)  # 通过第三层卷积、ReLU和池化x = x.view(-1, 64 * 4 * 4)  # 展平操作,为全连接层准备x = F.relu(self.fc1(x))  # 通过第一个全连接层并应用ReLU激活函数x = self.fc2(x)  # 通过第二个全连接层得到最终的分类结果return x# 实例化模型并打印出模型结构
model = CustomCNN()
print(model)

模型结构说明

连接层得到最终的分类结果
return x

实例化模型并打印出模型结构

model = CustomCNN()
print(model)

### 模型结构说明此代码定义了一个典型的卷积神经网络,它通过多个卷积层和池化层逐步提取图像特征,然后通过全连接层进行分类。每个卷积层后都跟有ReLU激活函数以及最大池化操作,目的是增强网络的非线性处理能力和减少特征维度,从而抑制过拟合并提高泛化能力。最终通过全连接层输出预测结果,适用于多类分类任务。

http://www.ppmy.cn/ops/136027.html

相关文章

使用Mac下载MySQL修改密码

Mac下载MySQL MySQL官网链接MySQL​​​​​​ 当进入到官网后下滑到community社区,进行下载 然后选择community sever下载 这里就是要下载的界面,如果需要下载之前版本的话可以点击archives, 可能会因为这是外网原因,有时候下…

go语言示例代码

go语言示例代码, package mainimport "fmt" import "encoding/json"func main() {list : []int{11, 12, 13, 14, 15}for i,x : range list {fmt.Println("i ", i, ",x ", x)}fmt.Println("")for i : range l…

leetcode:112. 路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指没有子节点…

如何将 Anaconda 源切换到国内镜像以提高下载速度:详细教程 ubuntu20.04 Pytorch

如何将 Anaconda 源切换到国内镜像以提高下载速度:详细教程 为了确保详尽和精确地说明在Ubuntu 20.04上将Anaconda源切换到国内镜像的步骤,我们将进一步详细化每个操作步骤,提供更具体的命令和解释,以确保即使是对Linux不熟悉的用…

Java爬虫与淘宝API接口:深度解析销量和商品详情数据获取

引言 在电商领域,数据的重要性不言而喻。淘宝作为中国最大的电商平台之一,其商品销量和详情数据对于市场分析、库存管理、销售策略制定等方面具有极高的价值。Java作为一种广泛应用的编程语言,结合淘宝API接口,可以有效地进行数据…

为什么transformer的时间复杂度是N的平方,具体是里面的哪一个计算流程最占用时间

Transformer的时间复杂度为 O(N2),其中 NN 是输入序列的长度。这一复杂度主要来源于自注意力机制(self-attention mechanism)的计算过程。 在Transformer模型中,自注意力机制的核心步骤是计算查询(Query)、…

【POSIX】posix_fadvise()接口

前言 posix_fadvise()是一个 POSIX 标准的系统调用&#xff0c;用于为打开的文件描述符提供建议&#xff0c;以优化文件 I/O 操作。它允许应用程序指示内核如何处理与特定文件的读取和写入操作。 函数原型 #include <fcntl.h>int posix_fadvise(int fd, off_t offset,…

Mac M4苹果电脑M4上支持的AE/PR/PS/AI/ID/LrC/AU/DC/ME有哪些?

Mac 首次搭载 M4 芯片&#xff0c;为创业者、学生、创作者等用户带来出众性能。M4 芯片配备了最多 10 核中央处理器&#xff0c;包括 4 颗性能核心和最多 6 颗能效核心。中央处理器性能相比 M1 提升最多可达 1.8 倍&#xff0c;让使用 Safari 浏览器和 Excel 等 app 进行多任务…