当前位置: 首页 > article >正文

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

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

在这里插入图片描述

要复现图中展示的卷积神经网络(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 F

class 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,填充2
        self.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,通道数为64
        self.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.kler.cn/a/404896.html

相关文章:

  • Easyexcel(1-注解使用)
  • 私域四步走:打造你的专属流量池
  • python --基础阶段--文件操作(5)
  • AI Prompt Engineering
  • springboot基于数据挖掘的广州招聘可视化分析系统
  • python实战案例----使用 PyQt5 构建简单的 HTTP 接口测试工具
  • 99.【C语言】数据结构之二叉树的基本知识
  • Spring MVC 中是如何保证Controller的并发安全?
  • 【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
  • C#高级:Winform中的自定义窗体输入
  • 向量数据库FAISS之四:向量检索和 FAISS
  • OpenCV基础(2)
  • React基础知识一
  • P8692 [蓝桥杯 2019 国 C] 数正方形:结论,组合数学
  • 使用ENSP实现静态路由
  • CPU详细介绍
  • Grafana监控PostgreSQL
  • 机器学习系列----关联分析
  • 京东最新黑边背景旋转验证码识别
  • ApiChain 从迭代到项目 接口调试到文档生成单元测试一体化工具
  • Docker+fastapi
  • 2.预备知识
  • SentenceTransformers×Milvus:如何进行向量相似性搜索
  • SAP PI/PO Proxy2JDBC SQL_QUERY动态接口示例
  • H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连
  • 视频流媒体播放器EasyPlayer.js无插件直播流媒体音视频播放器Android端webview全屏调用无效问题