⽹络中的网络(NIN)

《动手学深度学习pytorch》部分学习笔记,仅用作自己复习。

网络中的网络(NIN)

前几节介绍的LeNetAlexNetVGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)。它提出了另外⼀个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建⼀个深层网络。

NIN块

卷积层的输入和输出通常是四维数组(样本,通道,⾼,宽),⽽全连接层的输⼊和输出则通常是⼆维数组(样本,特征)。如果想在全连接层后再接上卷积层,则需要将全连接层的输出变换为四维。在多输⼊通道和多输出通道里介绍的 1×1卷积层。它可以看成全连接层,其中空间维度(⾼和宽)上的每个元素相当于样本,通道相当于特征。因此,NiN使⽤ 1×1卷积层来替代全连接层,从⽽使空间信息能够⾃然传递到后面的层中去。下图对⽐了NiN同AlexNet和VGG等⽹络在结构上的主要区别。

NiN块是NiN中的基础块。它由⼀个卷积层加两个充当全连接层的 1×1卷积层串联⽽成。其中第一个卷积层的超参数可以⾃行设置,⽽第二和第三个卷积层的超参数⼀般是固定的。

import time
import torch
from torch import nn, optimimport sys
sys.path.append("..") 
import d2lzh_pytorch as d2l
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')print(torch.__version__)
print(device)

NiN块 

def nin_block(in_channels, out_channels, kernel_size, stride, padding):blk = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding),nn.ReLU(),nn.Conv2d(out_channels, out_channels, kernel_size=1),nn.ReLU(),nn.Conv2d(out_channels, out_channels, kernel_size=1),nn.ReLU())return blk

 NIN模型

NiN是在AlexNet问世不久后提出的。它们的卷积层设定有类似之处。NiN使⽤卷积窗⼝形状分别为11x11、5x5 和 3x3的卷积层,相应的输出通道数也与AlexNet中的⼀致。每个NiN块后接⼀个步幅为2、窗⼝形状为 3x3的最⼤池化层。

除使用NiN块以外,NiN还有⼀个设计与AlexNet显著不同NiN去掉了了AlexNet最后的3个全连接层,取而代之地,NiN使⽤了输出通道数等于标签类别数的NiN块,然后使⽤全局平均池化层对每个通道中所有元素求平均并直接用于分类。这⾥的全局平均池化层即窗⼝形状等于输⼊空间维形状的平均池化层。NiN的这个设计的好处是可以显著减⼩模型参数尺⼨,从⽽缓解过拟合。然而,该设计有时会造成获得有效模型的训练时间的增加。

# 已保存在d2lzh_pytorch
class GlobalAvgPool2d(nn.Module):
# 全局平均池化层可通过将池化窗⼝口形状设置成输⼊入的⾼高和宽实现def __init__(self):super(GlobalAvgPool2d, self).__init__()def forward(self, x):return F.avg_pool2d(x, kernel_size=x.size()[2:])
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.Dropout(0.5),# 标签类别数是10nin_block(384, 10, kernel_size=3, stride=1, padding=1),# 全局平均池化层可通过将窗口形状设置成输入的高和宽实现nn.AvgPool2d(kernel_size=5),# 将四维的输出转成二维的输出,其形状为(批量大小, 10)d2l.FlattenLayer())

构建⼀个数据样本来查看每⼀层的输出形状。

X = torch.rand(1, 1, 224, 224)for name, blk in net.named_children(): X = blk(X)print(name, 'output shape: ', X.shape)

输出: 

0 output shape:  torch.Size([1, 96, 54, 54])
1 output shape:  torch.Size([1, 96, 26, 26])
2 output shape:  torch.Size([1, 256, 26, 26])
3 output shape:  torch.Size([1, 256, 12, 12])
4 output shape:  torch.Size([1, 384, 12, 12])
5 output shape:  torch.Size([1, 384, 5, 5])
6 output shape:  torch.Size([1, 384, 5, 5])
7 output shape:  torch.Size([1, 10, 5, 5])
8 output shape:  torch.Size([1, 10, 1, 1])
9 output shape:  torch.Size([1, 10])

获取数据和训练模型 

依然使用Fashion-MNIST数据集来训练模型。NiN的训练与AlexNet和VGG的类似,但这⾥使⽤的学习率更大。 

batch_size = 128
# 如出现“out of memory”的报错信息,可减小batch_size或resize
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)lr, num_epochs = 0.002, 5
optimizer = torch.optim.Adam(net.parameters(), lr=lr)
d2l.train_ch5(net, train_iter, test_iter, batch_size, optimizer, device, num_epochs)

输出:

training on  cuda
epoch 1, loss 0.0101, train acc 0.513, test acc 0.734, time 260.9 sec
epoch 2, loss 0.0050, train acc 0.763, test acc 0.754, time 175.1 sec
epoch 3, loss 0.0041, train acc 0.808, test acc 0.826, time 151.0 sec
epoch 4, loss 0.0037, train acc 0.828, test acc 0.827, time 151.0 sec
epoch 5, loss 0.0034, train acc 0.839, test acc 0.831, time 151.0 sec

小结

  • NiN重复使⽤由卷积层和代替全连接层的 1×1卷积层构成的NiN块来构建深层⽹网络。
  • NiN去除了容易造成过拟合的全连接输出层,⽽是将其替换成输出通道数等于标签类别数的NiN块和全局平均池化层。
  • NiN的以上设计思想影响了后⾯⼀系列卷积神经⽹络的设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1549780.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习理论与实战(十二)神经网络

神经网络又火了,因为深度学习火了,所以必须增加个传统神经网络的介绍,尤其是back propagation算法。很简单,俺也就不舞文弄墨的说复杂咯,神经网络模型如(图一)所示: (图一) (图一)中的神经网络模型是由多个感知器(perceptron)分几层组合而成,所谓感知器就是单层的…

打通NI LabVIEW与飞桨工具链,百度携手NI探索工业硬科技新方向

小到一部手机、大到一辆汽车,地上的网络通信、天上的卫星,所有的高科技产品从设计到生产使用的每个环节,都需要进行复杂的测试与验证。因此,自动化测试测量以及对数据的分析能力和效率不仅推动着科技的革新,也具有巨大…

NI9185与NI9234硬件在NI MAX中的设置

NI CDAQ-9185是一款四槽机箱,通过TCP协议(网线)与电脑相连。NI 9234是声振采集卡,4通道。用来测量来自集成电子压电(IEPE)和非IEPE传感器信号,例如振动传感器(加速度计)&…

计算机系统:网络编程

所有的网络应用都是基于相同的基本编程模型(客户端-服务器编程模型),有着相似的整体逻辑结构,并且依赖相同的编程接口。 客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型的。采用这个模型,一个应用是由一…

NoC片上网络

片上网络: 一般采用2D mesh拓扑,其核心为路由算法/流控机制,路由一般使用固定XY或虫孔算法, 目前比较好的NoC开源参考工程为:LisNoC http://www.lisnoc.org/flowcontrol.html ARM官方也有一些NoC应用: …

LabVIEW中MAX在我的网络上不显示“远程系统”选项卡或设备

LabVIEW中MAX在我的网络上不显示“远程系统”选项卡或设备 无法在NI MAX中看到“远程系统”选项卡。 无法在NI MAX的“远程系统”选项卡下看到我的设备。 解决方案 如果设备是实时操作系统,则设备只会显示在NIMeasurement&Automation Explorer&#xff0…

网络中的网络:NiN

前面几篇文章介绍的LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如 何对这两个模块加宽(增加通道数&…

LabVIEW网络服务器何使用,有哪些不同

LabVIEW网络服务器何使用,有哪些不同 NI有几款不同的Web服务器,可使用不同的产品并覆盖不同的用例。它们具有非常相似的名称,可以互换使用,但每个都提供不同的功能。 应用程序Web服务器 描述:NI应用Web服务器加载使用L…

LabVIEW NI网络设备在MAX中不显示或未识别

LabVIEW NI网络设备在MAX中不显示或未识别 有一个NI设备通过网络连接到主机。发生以下情况之一: 尝试在Measurement&AutomationExplorer(MAX)中配置设备。设备未显示在“远程系统”下。 NIMAX中未检测到CompactRIO(cRI…

站点平台技术架构

系统架构部署思维导图 一、前期工作 1.系统保持一致性方案: GIT版本控制:通过总控端向租户端发送一个更新同步请求,租户端收到请求后执行GIT PULL 命令,执行完成命令后会进行获取当前版本指定的SQL文件,进行同步更新…

选购Redshift工作站需要注意哪些方面?

GPU 渲染在过去几年中变得非常流行。这并不奇怪,这要归功于 GPU 功能的巨大进步。专为 Redshift 等 GPU 加速渲染引擎量身定制的经过良好优化的工作站可以实时生成高度详细的渲染。 Maxon Redshift 与许多行业领先的 3D 设计应用程序完美集成,使其成为建…

华为mate x2什么时候更新鸿蒙系统,华为Mate X2真机发布,今年四月可升级鸿蒙系统...

沉寂许久的华为终于迎来新的动作,新一代折叠屏旗舰机Mate X2于2月22日晚上正式发布。有人即使不在江湖,暂时退场,当他回归时,江湖依然会有人翘首以盼,等待着他带来新的震撼。 华为折叠屏新机Mate X2发布的消息一经传出…

华为matexs什么时候可以升级鸿蒙,华为 Mate X2 真机发布,今年四月可升级鸿蒙系统...

沉寂许久的华为终于迎来新的动作,新一代折叠屏旗舰机 Mate X2 于 2 月 22 日晚上正式发布。有人即使不在江湖,暂时退场,当他回归时,江湖依然会有人翘首以盼,等待着他带来新的震撼。 华为折叠屏新机 Mate X2 发布的消息…

华为Mate X2售价17999元起,Mate X2将首批省级鸿蒙系统

昨日晚间,华为正式发布新一代折叠屏手机Mate X2,搭载麒麟9000芯片,其256GB版售价17999元,512GB版售价18999元,万元的价格!一个字‘贵’ 核心规格方面,华为Mate X2搭载5nm制程工艺的麒麟9000 5G …

Docker部署MongoDB 5.0.5

1、查看目录 rootwielun:~# tree mongo mongo ├── conf │ └── mongod.conf ├── data ├── docker-compose.yml └── logrootwielun:~# cd mongo rootwielun:~/mongo# chmod 777 log2、配置docker-compose.yml rootwielun:~/mongo# cat docker-compose.yml ve…

科技资讯|荷兰电动自行车丢失将被拒保,苹果Find My可以减少丢失

荷兰最大的自行车协会荷兰皇家旅游俱乐部宣布,将不再为胖胎电动自行车提供保险,因为这种自行车的被盗风险极高。 随着电动自行车的销量飙升,胖胎也变得更受欢迎。但问题是,胖胎电动自行车也成为了自行车盗窃者的首选目标。ANWB …

Linux centos7 高频词统计

如何统计文章中高频词?是我们经常遇到的问题,也是多场合考察个人知识整合能力的重要手段。招聘经典问题:linux中命令行统计文件中前10个高频词。 在讨论此问题中,主要应用到的知识点有:排序、去重、单词查询、grep、sed和awk使用…

Matplotlib学习笔记

Matplotlib数据可视化库 jupyter notebook优势 画图优势,画图与数据展示同时进行。数据展示优势,不需要二次运行,结果数据会保留。 Matplotlib画图工具 专用于开发2D图表以渐进、交互式方式实现数据可视化 常规绘图方法 子图与标注 想要…

python网易云_python下载网易云音乐

1.安装python3 2.安装pip 3.安装requests模块和urllib模块 通过pip 安装 4.看下面的视频操作https://www.zhihu.com/video/1120981899643940864 代码 import requests import urllib def cbk(a,b,c): 回调函数 a:已经下载的数据块 b:数据块的大小 c:远程文件的大小 …

SSL/TLS协议信息泄露漏洞(CVE-2016-2183)/SSL/TLS RC4 信息泄露漏洞(CVE-2013-2566)

SSL/TLS协议信息泄露漏洞(CVE-2016-2183)/SSL/TLS RC4 信息泄露漏洞(CVE-2013-2566)/SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808) 这几个漏洞都指向ssl,服务器为win2012 r2 standard 一、漏洞说明 Windows server 2012R2远程桌面服务SSL加密默…