Network in Network(NiN)

文章目录

  • 前言
  • 一、NiN是什么?
  • 二、具体代码示例
    • 1.NiN块
    • 2.NiN 模块
    • 3. 训练模型
  • 总结


前言

提示:前人LeNet到AlexNet主要作用是提高加深了网络的深度和参数数量。从AlexNet到VGG 主要是提出了后续kernel大小的依据有规律的增加channel大小,减小image size 大小的过程。 而今天来看下不同的Idea, NiN 。这个是有新加坡李敏团队开发的。他也是MXNet的早期开发者。它的作用本身并不大,并没有提高太多的识别率,但最大的贡献是减少了大量的参数,为后续的GoogleNet 思想提供重要的支持


一、NiN是什么?

它串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络

二、具体代码示例

1.NiN块

代码如下(示例):

from d2l import torch as d2l
import torch
from torch import nndef nin_block(in_channels,out_channels,strides,kernel_size,padding):return nn.Sequential(nn.Conv2d(in_channels,out_channels,kernel_size,strides,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())

2.NiN 模块

代码如下(示例)

net = nn.Sequential(nin_block(1,96,strides=4,kernel_size=11, padding=0),nn.MaxPool2d(3,stride=2),nin_block(96,256,kernel_size=5,strides=1,padding=2),nn.MaxPool2d(kernel_size=3,stride=2),nin_block(256,348,kernel_size=3,strides=1,padding=1),nn.MaxPool2d(kernel_size=3,stride=2),nn.Dropout(0.5),nin_block(348,10,kernel_size=3,strides=1,padding=1),nn.AdaptiveAvgPool2d((1,1)),nn.Flatten()
)

这个还是按照AlexNet模型做修改:


3. 训练模型


# 这里查看模型的参数变化
X = torch.randn((1,1,224,224))
for layer in net:X = layer(X)print(layer.__class__.__name__, 'X shape is \t',X.shape)
#Sequential X shape is 	 torch.Size([1, 96, 54, 54])
#MaxPool2d X shape is 	 torch.Size([1, 96, 26, 26])
#Sequential X shape is 	 torch.Size([1, 256, 26, 26])
#MaxPool2d X shape is 	 torch.Size([1, 256, 12, 12])
#Sequential X shape is 	 torch.Size([1, 348, 12, 12])
#MaxPool2d X shape is 	 torch.Size([1, 348, 5, 5])
#Dropout X shape is 	 torch.Size([1, 348, 5, 5])
#Sequential X shape is 	 torch.Size([1, 10, 5, 5])
#AdaptiveAvgPool2d X shape is 	 torch.Size([1, 10, 1, 1])
#Flatten X shape is 	 torch.Size([1, 10])# 导入模型的数据
lr,num_epochs,batch_size = 0.1,10,18
train_iter,test_iter = d2l.load_data_fashion_mnist(batch_size)# 最后进行训练
d2l.train_ch6(net,train_iter,test_iter,num_epochs,lr)

总结

提示:这里对文章进行总结:
我所理解的NiN是Dense层和Conv层的结合体。它去除了Dense层参数过多的问题,又保留了Conv获得特征的优点。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部