[pytorch、学习] - 5.8 网络中的网络(NiN)
参考
5.8 网络中的网络(NiN)
前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)。它提出了另外一个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。
5.8.1 NiN块
我们知道,卷积层的输入和输出通常是四维数组(样本, 通道, 高, 宽),而全连接层的输入和输出则通常是二维数组(样本、特征)。如果想在全连接层后再接上卷积层,则需要将全连接层的输出变成四维。
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')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
5.8.2 NiN模型
NiN是在AlexNet问世不久后提出的。它们的卷积层设定有类似之处。NiN使用卷积窗口形状分别为 11×11、 5×5和3×3的卷积层,相应的输出通道也与AlexNet中的一致。每个NiN块后接一个步幅为2、窗口形状为3×3的最大池化层。
除使用NiN块以外,NiN还有一个设计与AlexNet显著不同:NiN去掉了AlexNet最后的3个全连接层,取而代之地,NiN使用了输出通道数等于标签类别数的NiN块,然后使用全局平均池化层对每个通道中所有元素求平均并直接用于分类。这里的全局平均池化层即窗口形状等于输入空间维形状的平均池化层。NiN的这个设计的好处是可以显著减小模型参数尺寸,从而缓解过拟合。然而,该设计有时会造成获得有效模型的训练时间的增加。
import torch.nn.functional as Fclass 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),GlobalAvgPool2d(),# 将四维的输出转成二维的输出,其形状为(批量, 10)d2l.FlattenLayer()
)print(net)
构建数据观察每一层的结构
X = torch.rand(1, 1, 224, 224)
for name, blk in net.named_children():X = blk(X)print(name, 'output shape: ', X.shape)
5.8.3 获取数据和训练模型
batch_size = 128
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)
[pytorch、学习] - 5.8 网络中的网络(NiN)相关推荐
- 【动手学深度学习PyTorch版】19 网络中的网络 NiN
上一篇请移步[动手学深度学习PyTorch版]18 使用块的网络 VGG_水w的博客-CSDN博客 目录 一.网络中的网络 NiN 1.1 NiN ◼ 全连接层的问题 ◼ 大量的参数会带来很多问题 ◼ ...
- Pytorch 网络中的网络 NiN
Pytorch 网络中的网络 NiN 0. 环境介绍 环境使用 Kaggle 里免费建立的 Notebook 教程使用李沐老师的 动手学深度学习 网站和 视频讲解 小技巧:当遇到函数看不懂的时候可以按 ...
- (pytorch-深度学习系列)网络中的网络(NiN)
网络中的网络(NiN) LeNet.AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果.其中,AlexNet和VGG对LeNet ...
- 论无线网络中的网络与信息安全技术
试题一 论无线网络中的网络与信息安全技术 无线网络应用越来越广泛,也带来了极大的便利.但是,无线网络各类应用也带来了各种安全问题,迫使管理员采用相应的网络与信息安全技术. 请围绕"论无线网络 ...
- 网络中的网络:NiN
前面几篇文章介绍的LeNet.AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果.其中,AlexNet和VGG对LeNet的改进 ...
- 第四章第8节 网络中的网络(NiN)
前几节介绍的LeNet.AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果.其中,AlexNet和VGG对LeNet的改进主要在 ...
- 2.5 网络中的网络及1x1卷积-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.4 残差网络为什么有用? 回到目录 2.6 谷歌 Inception 网络简介 网络中的卷积及1x1卷积 (Network in Network and 1x1 Conv ...
- docker学习笔记(三)docker中的网络
目录 Linux中的网卡 Network Namespace Docker中的Bridge网络 使用自定义Bridge网络创建容器 Container中的其他网络 Host网络 None网络 Linu ...
- 叙述计算机网络的分类与拓扑结构,计算机的网络中有线网络和无线网络最主要的区别是()。...
相关题目与解析 把计算机网络分为有线网和无线网的分类依据是().A.网络的地理位置B.网络的传输介质C.网络的拓扑结 按使用的传输介质计算机网络可以分为有线网络和无线网络.() 从计算机网络的构成来看 ...
最新文章
- 英飞凌AI电磁越野组浅析
- Windows下基于python3使用word2vec训练中文维基百科语料(一)
- c语言Winmain 错误,C语言编译错误 undefined reference to `WinMain@16'
- 015:字符串:格式化
- SQL经典面试题及答案
- 使用IDEA Maven搭建Mybatis环境
- 栈溢出利用-----jmp esp
- 长亭php反序列化防护_CTF-攻防世界-Web_php_unserialize(PHP反序列化)
- php 漂亮的分页类
- 一步一步写算法(之线性结构的处理)
- 每日长难句打卡Day23
- 未来无人车市场中,谁最赚钱?
- 对象内存布局 (9)
- es6 箭头函数后面的大括号
- 接不住了,能撒手吗?
- [No0000DD]C# StringEx 扩展字符串类 类封装
- webstorm 配合IIS使用
- android+即刻点赞,Android开发仿即刻点赞文字部分的自定义View
- 4k hidpi 黑苹果_黑苹果如何开启HiDPI? 黑苹果一键开启 macOS HiDPI教程
- java反向查找dns_windows – 反向DNS查找