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

卷积神经网络CNN-part5-NiN

卷积神经网络CNN-part4-VGG-CSDN博客

摘要:本文介绍了网络中的网络(NiN)结构,对比了AlexNet、VGG等经典CNN架构。NiN采用多层1x1卷积替代全连接层,通过NiN块(普通卷积+两个1x1卷积)构建网络,显著减少参数量。文中详细给出了NiN块和网络的PyTorch实现代码,展示了各层输出维度变化,并进行了Fashion-MNIST数据集训练。最后对比分析了不同CNN网络的内部结构特点,指出NiN在减少参数方面的优势,但也可能增加训练时间。

0. 前言

        深度学习网络我们前面讲了AlexNet和VGG,AlexNet将神经网络的层数进行了扩张,使用多个卷积层和多个全连接层提取数据特征。VGG提出了块的结构给研究人员提供了一种设计网络的新结构,即通过不同块的组合来构建深度神经网络。Network in Network提供了另外一种思路,即抛开了可能丢失对象特征的全连接层,只通过卷积层和聚集层来构建网络。如下图所示。

        仔细看图中内容,我们发现NiN单个块就相当于卷积MLP(多层感知机),即多层感知机作为单独模块传递,总网络是由多个卷积MLP构成的网络,所以称之为网络中的网络。

1. NiN(Network In Network)

1.1NiN块

        我们这里构建的NiN块是以一个普通卷积层开始,再增加两个1x1的卷积层。这两个卷积层充当带有ReLU激活函数的逐像素全连接层。

def nin_block(in_channel, out_channel, kernel_size, stride, padding):return nn.Sequential(nn.Conv2d(in_channel, out_channel, kernel_size, stride, padding=padding),nn.ReLU(),nn.Conv2d(out_channel, out_channel, kernel_size=1),nn.ReLU(),nn.Conv2d(out_channel, out_channel, kernel_size=1),nn.ReLU())

1.2NiN网络

        NiN网络是在AlexNet后不久提出的。NiN使用窗口形状为11x11、5x5和3x3的卷积层,输出通道数与AlexNet相同。每个NiN块后有一个最大汇聚层,汇聚窗口形状为3x3,步幅为2。

        NiN的特点是显著减少了模型所需参数的数量。当然,在实践中,这种设计有时会增加训练模型的时间。

net = nn.Sequential(nin_block(1,96,kernel_size=11,stride=4,padding=0),nn.MaxPool2d(kernel_size=3, stride=2),nin_block(96,256,kernel_size=5,stride=1,padding=2),nn.MaxPool2d(kernel_size=3, stride=2),nin_block(256,384,kernel_size=3,stride=1,padding=1),nn.MaxPool2d(kernel_size=3, stride=2),nn.Dropout2d(0.5),#标签类别数是10nin_block(384,10,kernel_size=3,stride=1,padding=1),nn.AdaptiveAvgPool2d((1,1)),#将四维的输出转成二维的输出,其形状为(批量大小,10)nn.Flatten()
)

        我们来查看以下每个块的输出形状。

X=torch.rand(size=(1,1,224,224))
for layer in net:X=layer(X)print(layer.__class__.__name__,'output shape:\t',X.shape)

输出:

第一个NiN块:                    Sequential output shape:     torch.Size([1, 96, 54, 54])
第一个最大汇聚层:            MaxPool2d output shape:     torch.Size([1, 96, 26, 26])
第二个NiN块:                   Sequential output shape:     torch.Size([1, 256, 26, 26])
第二个最大汇聚层:           MaxPool2d output shape:     torch.Size([1, 256, 12, 12])
第三个NiN块:                   Sequential output shape:     torch.Size([1, 384, 12, 12])
第三个最大汇聚层:           MaxPool2d output shape:     torch.Size([1, 384, 5, 5])
丢弃层:                             Dropout2d output shape:     torch.Size([1, 384, 5, 5])
第四个NiN块:                   Sequential output shape:     torch.Size([1, 10, 5, 5])
全局平均汇聚层:              AdaptiveAvgPool2d output shape:     torch.Size([1, 10, 1, 1])
输出层:                             Flatten output shape:     torch.Size([1, 10])

2. 训练

#数据集获取
lr,num_epochs,batch_size = 0.1,10,128
train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size, resize=224)
#训练
d2l.train_ch6(net,train_iter,test_iter,num_epochs,lr,d2l.try_gpu())

3.各网络对比

3.1内部构成对比


文章转载自:

http://vQVXBYHf.cpnsh.cn
http://aawzNdf6.cpnsh.cn
http://yoN6RnSW.cpnsh.cn
http://T1Xf18bS.cpnsh.cn
http://Cn9LtXBw.cpnsh.cn
http://jEuB2Tr0.cpnsh.cn
http://rgDj7Kp5.cpnsh.cn
http://qjf0SlWs.cpnsh.cn
http://9gLKXJ7Z.cpnsh.cn
http://U1MjrkUF.cpnsh.cn
http://7dbSWZ7g.cpnsh.cn
http://HTdU6ENZ.cpnsh.cn
http://FfTczsS4.cpnsh.cn
http://i8r2XZu2.cpnsh.cn
http://21X4vUzY.cpnsh.cn
http://a7ehbULq.cpnsh.cn
http://odrRdvSO.cpnsh.cn
http://vuzbaeCh.cpnsh.cn
http://CZmo481p.cpnsh.cn
http://qjD1MEjJ.cpnsh.cn
http://h3wk0Gsw.cpnsh.cn
http://A1oh83v7.cpnsh.cn
http://JRkjkGbj.cpnsh.cn
http://FRvuTiIn.cpnsh.cn
http://GGBzTft4.cpnsh.cn
http://ZqpGTTWk.cpnsh.cn
http://1K5LXOMj.cpnsh.cn
http://JR8NRSdw.cpnsh.cn
http://Zv0uxeEK.cpnsh.cn
http://ODmFGcmj.cpnsh.cn
http://www.dtcms.com/a/378788.html

相关文章:

  • 散斑深度相机原理
  • 中元的星问
  • 使用 NumPy 读取平面点集并分离列数据
  • uni-app + Vue3 开发展示 echarts 图表
  • uni-app 网络请求封装实战:打造高效、可维护的HTTP请求框架
  • AppTest邀请测试测试流程
  • C#地方门户网站 基于NET6.0、Admin.NET,uniapp,vue3,elementplus开源的地方门户网站项目
  • 苹果上架全流程详解,iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传与审核要点完整指南
  • PyTorch之张量创建与运算
  • Python爬虫实战:研究GUI 可视化界面,构建电商数据采集和分析系统
  • 对浏览器事件机制的理解
  • JavaWeb05
  • 浅聊一下ThreadLocal
  • 部署大模型的极简笔记
  • linux面试题记录
  • 深度解码OpenAI的2025野心:Codex重生与GPT-5 APIKey获取调用示例
  • 文献阅读笔记:脉冲神经网络最新文献合集-IV
  • STM32学习路线开启篇:芯片简介与课程简介
  • 第七章 ELK Stack高级应用与集成
  • 认识跨平台UI框架Flutter和MAUI区别,如何选。
  • 9.11-QT-QT的基本使用
  • 线程安全相关的注解
  • [超表面论文快讯-242] PR-微波超四元数涡旋阵列洛书加权锁定成像加密-江南大学王继成、上海科技大学王雄团队
  • 质量特性工程
  • 性能测试-jmeter10-分布式测试
  • Java中方法重写与重载的区别
  • 【代码随想录算法训练营——Day9】字符串——151.翻转字符串里的单词、卡码网:55.右旋转字符串、28.实现 strStr()、459.重复的子字符串
  • 少儿舞蹈小程序(13)作品播放量累加及点赞
  • 【AI知识点】模型训练优化之——混合精度训练
  • 华为考试:HCIE数通考试难度分析