《动手学深度学习》Paddle 版源码-5.08章(NIN)


网络中的网络(NiN)不同于LeNet、AlexNet和VGG,它串联多个含卷积层和1×1卷积层(替代全连接层)的NiN块构建深层网络。其用输出通道数等于标签类别数的NiN块加全局平均池化层替代全连接输出层,可减小参数、缓解过拟合,训练类似AlexNet但学习率更大,思想影响后续卷积神经网络设计。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

《动手学深度学习》paddle 版源码-5.08章(nin) -

网络中的网络(NiN)

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

NiN块

我们知道,卷积层的输入和输出通常是四维数组(样本,通道,高,宽),而全连接层的输入和输出则通常是二维数组(样本,特征)。如果想在全连接层后再接上卷积层,则需要将全连接层的输出变换为四维。回忆在“多输入通道和多输出通道”一节里介绍的1×11×1卷积层。它可以看*连接层,其中空间维度(高和宽)上的每个元素相当于样本,通道相当于特征。因此,NiN使用1×11×1卷积层来替代全连接层,从而使空间信息能够自然传递到后面的层中去。图5.7对比了NiN同AlexNet和VGG等网络在结构上的主要区别。

《动手学深度学习》Paddle 版源码-5.08章(NIN) -        

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

In [ ]
import paddleimport paddle.nn as nnimport numpy as npimport warnings
warnings.filterwarnings("ignore", category=Warning) # 过滤报警信息class Nin(nn.Layer):
    def __init__(self, num_channels, num_filters, kernel_size, strides, padding):
        super(Nin, self).__init__()
        model = [
            nn.Conv2D(num_channels, num_filters, kernel_size, stride=strides, padding=padding),
            nn.ReLU(),
            nn.Conv2D(num_filters, num_filters, 1),
            nn.ReLU(),
            nn.Conv2D(num_filters, num_filters, 1),
            nn.ReLU()
        ]
        self.model = nn.Sequential(*model)    def forward(self, X):
        return self.model(X)
   

NiN模型

NiN是在AlexNet问世不久后提出的。它们的卷积层设定有类似之处。NiN使用卷积窗口形状分别为11×1111×11、5×55×5和3×33×3的卷积层,相应的输出通道数也与AlexNet中的一致。每个NiN块后接一个步幅为2、窗口形状为3×33×3的最大池化层。

Openflow Openflow

一键极速绘图,赋能行业工作流

Openflow 88 查看详情 Openflow

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

In [ ]
class Net(nn.Layer):
    def __init__(self, num_channels, class_dim):
        super(Net, self).__init__()
        model = [
            Nin(num_channels, 96, 11, strides=4, padding=0),
            nn.MaxPool2D(kernel_size=3, stride=2),
            Nin(96, 256, 5, strides=1, padding=2),
            nn.MaxPool2D(kernel_size=3, stride=2),
            Nin(256, 384, 3, strides=1, padding=1),
            nn.MaxPool2D(kernel_size=3, stride=2),
            nn.Dropout(),            # 标签类别数是10
            Nin(384, 10, 3, strides=1, padding=1),
            paddle.fluid.dygraph.Pool2D(pool_type='max', global_pooling=True)
        ]
        self.model = nn.Sequential(*model)    def forward(self, X):
        Y = self.model(X)
        Y = paddle.flatten(Y, start_axis=1)        return Y

net = Net(3, 10)
X = paddle.to_tensor(np.random.uniform(-1., 1., [5, 3, 224, 224]).astype('float32'))
Y = net(X)print(Y.shape)
       
[5, 10]
       

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

In [ ]
net = Net(1, 10)
param_info = paddle.summary(net, (1, 1, 224, 224))print(param_info)
       
---------------------------------------------------------------------------
 Layer (type)       Input Shape          Output Shape         Param #    
===========================================================================
   Conv2D-13     [[1, 1, 224, 224]]    [1, 96, 54, 54]        11,712     
    ReLU-13      [[1, 96, 54, 54]]     [1, 96, 54, 54]           0       
   Conv2D-14     [[1, 96, 54, 54]]     [1, 96, 54, 54]         9,312     
    ReLU-14      [[1, 96, 54, 54]]     [1, 96, 54, 54]           0       
   Conv2D-15     [[1, 96, 54, 54]]     [1, 96, 54, 54]         9,312     
    ReLU-15      [[1, 96, 54, 54]]     [1, 96, 54, 54]           0       
     Nin-5       [[1, 1, 224, 224]]    [1, 96, 54, 54]           0       
  MaxPool2D-4    [[1, 96, 54, 54]]     [1, 96, 26, 26]           0       
   Conv2D-16     [[1, 96, 26, 26]]     [1, 256, 26, 26]       614,656    
    ReLU-16      [[1, 256, 26, 26]]    [1, 256, 26, 26]          0       
   Conv2D-17     [[1, 256, 26, 26]]    [1, 256, 26, 26]       65,792     
    ReLU-17      [[1, 256, 26, 26]]    [1, 256, 26, 26]          0       
   Conv2D-18     [[1, 256, 26, 26]]    [1, 256, 26, 26]       65,792     
    ReLU-18      [[1, 256, 26, 26]]    [1, 256, 26, 26]          0       
     Nin-6       [[1, 96, 26, 26]]     [1, 256, 26, 26]          0       
  MaxPool2D-5    [[1, 256, 26, 26]]    [1, 256, 12, 12]          0       
   Conv2D-19     [[1, 256, 12, 12]]    [1, 384, 12, 12]       885,120    
    ReLU-19      [[1, 384, 12, 12]]    [1, 384, 12, 12]          0       
   Conv2D-20     [[1, 384, 12, 12]]    [1, 384, 12, 12]       147,840    
    ReLU-20      [[1, 384, 12, 12]]    [1, 384, 12, 12]          0       
   Conv2D-21     [[1, 384, 12, 12]]    [1, 384, 12, 12]       147,840    
    ReLU-21      [[1, 384, 12, 12]]    [1, 384, 12, 12]          0       
     Nin-7       [[1, 256, 12, 12]]    [1, 384, 12, 12]          0       
  MaxPool2D-6    [[1, 384, 12, 12]]     [1, 384, 5, 5]           0       
   Dropout-2      [[1, 384, 5, 5]]      [1, 384, 5, 5]           0       
   Conv2D-22      [[1, 384, 5, 5]]      [1, 10, 5, 5]         34,570     
    ReLU-22       [[1, 10, 5, 5]]       [1, 10, 5, 5]            0       
   Conv2D-23      [[1, 10, 5, 5]]       [1, 10, 5, 5]           110      
    ReLU-23       [[1, 10, 5, 5]]       [1, 10, 5, 5]            0       
   Conv2D-24      [[1, 10, 5, 5]]       [1, 10, 5, 5]           110      
    ReLU-24       [[1, 10, 5, 5]]       [1, 10, 5, 5]            0       
     Nin-8        [[1, 384, 5, 5]]      [1, 10, 5, 5]            0       
   Pool2D-2       [[1, 10, 5, 5]]       [1, 10, 1, 1]            0       
===========================================================================
Total params: 1,992,166
Trainable params: 1,992,166
Non-trainable params: 0
---------------------------------------------------------------------------
Input size (MB): 0.19
Forward/backward pass size (MB): 28.08
Params size (MB): 7.60
Estimated Total Size (MB): 35.87
---------------------------------------------------------------------------

{'total_params': 1992166, 'trainable_params': 1992166}
       

训练模型

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

In [ ]
import paddleimport paddle.vision.transforms as Tfrom paddle.vision.datasets import FashionMNIST# 数据集处理transform = T.Compose([
    T.Resize(64),
    T.Transpose(),
    T.Normalize([127.5], [127.5]),
])
train_dataset = FashionMNIST(mode='train', transform=transform)
val_dataset = FashionMNIST(mode='test', transform=transform)# 模型定义model = paddle.Model(Net(1, 10))# 设置训练模型所需的optimizer, loss, metricmodel.prepare(
    paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters()),
    paddle.nn.CrossEntropyLoss(),
    paddle.metric.Accuracy(topk=(1, 5)))# 启动训练、评估model.fit(train_dataset, val_dataset, epochs=2, batch_size=64, log_freq=100)
       
The loss value printed in the log is the current step, and the metric is the *erage value of previous step.
Epoch 1/2
step 100/938 - loss: 2.0404 - acc_top1: 0.1755 - acc_top5: 0.6389 - 353ms/step
step 200/938 - loss: 1.9281 - acc_top1: 0.1902 - acc_top5: 0.6545 - 355ms/step
step 300/938 - loss: 1.9774 - acc_top1: 0.2047 - acc_top5: 0.6621 - 355ms/step
step 400/938 - loss: 2.0007 - acc_top1: 0.2241 - acc_top5: 0.6729 - 356ms/step
step 500/938 - loss: 1.9303 - acc_top1: 0.2351 - acc_top5: 0.6763 - 357ms/step
       

小结

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

以上就是《动手学深度学习》Paddle 版源码-5.08章(NIN)的详细内容,更多请关注其它相关文章!


# 学习计划  # 企业营销推广合同  # tp框架利于seo吗  # 威县网站建设怎么样  # 网站推广工具图片尺寸  # 泉州网站建设优化建站  # 建设银行眉山支行网站  # 黄骅网站优化哪家好  # 昆明抖音seo优化团队  # 昭通中小网站建设  # 昆山融媒体网站建设  # 压缩率  # ai  # 进行自我  # 四维  # 来袭  # 营收  # 更大  # 之处  # 多个  # 中文网  # type  # latte  # 区别 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 抢占新赛道 加快机器人产业集聚发展  鸿蒙4即将支持大规模AI模型  微幼科技推出全自动晨检机器人,助力幼儿园校园健康检测  360°/180°双模式,佳能公布可折叠小体积的VR全景相机  编程版GPT狂飙30星,AutoGPT危险了!  马斯克回应“人工智能让一切变得更好”:我们已经是半机器人了  面向AI大模型,腾讯云首次完整披露自研星脉高性能计算网络  精准度可提高 20%:英国九家银行签约使用基于 AI 的“消费者欺诈风险系统”应对*  基于信息论的校准技术,CML让多模态机器学习更可靠  微软 Azure AI 文本转语音服务升级:新增男性声音和扩展语言支持  实测 AI 建筑设计软件的自动生成效果图能力  上海发布“元宇宙关键技术攻关行动方案”,加快 AIGC 等突破  小米9号员工李明宣布创业:打造首款安卓桌面机器人  微软Bing聊天机器人电脑端即将支持语音提问  “苏南 vs 苏北” AI 分胜负,娱乐性比较工具 EitherChoice 上线  讯飞星火大模型实现升级 助力通用人工智能人才培养  焊接协作机器人或将成为26届埃森展最大看点  马斯克发推讽刺人工智能,机器学习本质是统计?  世界人工智能大会高合发表演讲,HiPhi Y即将全球上市  2025年深圳举办的SUSECON 创新峰会开始接受报名  编程已死,AI 当立?教授公开“唱反调”:AI 还帮不了程序员  AI成政客博弈工具,美国大选真假难辨,律师们的生意来了  机构:边缘AI或是当前预期差最大的AI方向  长宁这家企业在世界人工智能大会上荣获“蓝鼎奖”  好莱坞面临全面停摆 好莱坞大罢工抵制“AI入侵”  中国移动副总经理高同庆:打造人工智能时代的智能服务运营新范式  陈根教授:离人形机器人时代还有10年吗?  下一个前沿:量子机器学习和人工智能的未来  有远见!华为四年前注册商标Vision Pro:苹果AR国内要改名  图像生成过程中遭「截胡」:稳定扩散的失败案例受四大因素影响  能抓取玻璃碎片、水下透明物,清华提出通用型透明物体抓取框架,成功率极高  刊·见 | 捕捉人工智能领域最新动态?收藏Applied Artificial Intelligence  人工智能快速发展 打开就业新空间  13条咒语挖掘GPT-4最大潜力,Github万星AI导师火了,网友:隔行再也不隔山了  猿辅导推出Motiff,整合三大AI功能,助力UI设计生产力革新  探索AI前沿理念 2025全球人工智能技术大会在杭州开幕  传字节内测对话式 AI 产品,代号「Grace」;马斯克嘲讽苹果 头显;比亚迪 F 品牌定名「方程豹」  创新全场景清洁方案!海尔商用机器人首发上市  美图公司吴欣鸿:AI技术重构影像产业  AI无法对传统文化符号进行解构和创新  “智能体动作生成技术”现身WAIC:游戏AI技术为机器人科创注入新动力  以分布式网络串联闲置GPU,这家创企称可将AI模型训练成本降低90%  人工智能助力林草行业高质量发展  新华全媒+|AI:当心,我可能欺骗了你!  Xbox游戏工作室负责人:VR/AR领域的用户规模还不足够  大模型的“黄金搭档”来了!腾讯云正式发布AI原生向量数据库,提供10亿级向量检索能力  微软大牛加入ZOOM,AI人才大战打响  比尔盖茨:AI确实存在风险,但可控  新华三集团总裁兼首席执行官于英涛:人工智能时代需要想象力,更需要精耕务实  微软Xbox称VR和AR还需要时间 先玩大的 

 2025-08-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.