网络中的网络 NiN

目录

1.NiN

2.代码


1.NiN

卷积层的参数等于输入的通道数*输出的通道数乘以窗口的平方,然而全连接层的参数的大小等于输入的通道乘以图片的大小乘以输出的通道数。全连接层的参数很多,占用很多的内存,占用很多的计算带宽,很容易出现过拟合。收敛会特别快,可以做大一点的正则化不要一层把所有的东西都学到了。NiN的思想就是完全不要全连接层。


1*1的卷积层等价于全连接层,不会改变输入的形状。

对每一个通道拿出最大的值,如果类是1000类的话,最后的全局池化层输入的通道是1000的话,就把这1000个通道中拿到的值当作这个类别的预测,再加个softmax就会得到概率。最后也不需要使用全连接层。

2.代码

import torch 
from torch import nn
from d2l import torch as d2l


"""NiN块"""
def nin_block(in_chanels,out_chanels,kernel_size,strides,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())


"""NiN模型"""
# NiN使用窗口形状为11*11,5*5和3*3的卷积层,输出通道数量与AlexNet中的相同.每个NiN块
#后有一个最大汇聚层,汇聚窗口形状为3*3,步幅为2。NiN和AlexNet之间的一个显著区别是NiN完全
#取消了全连接层。 相反,NiN使用一个NiN块,其输出通道数等于标签类别的数量。最后放一个全局平
#均汇聚层(global average pooling layer),生成一个对数几率 (logits)。NiN设计的一个
#优点是,它显著减少了模型所需参数的数量。然而,在实践中,这种设计有时会增加训练模型的时间。
net=nn.Sequential(
        nin_block(1,96,kernel_size=11,strides=4,padding=0),
        nn.MaxPool2d(3,stride=2),
        nin_block(96,256,keinel_size=5,strides=1,padding=2),
        MaxPool2d(3,stride=2),
        nin_block(256,384,kernel_size=3,strides=1,padding=1),
        nn.MaxPool2d(3,stride=2),
        nn.Dropout(0.5),
        # 标签类别数是10
        nin_block(384,10,kernel_size=3,strides=1,padding=1),
        nn.AdaptiveAvgPool2d(1,1))
        # 将四维的输出转成二维的输出,其形状为(批量大小,10)
        nn.Flatten()


#创建一个数据样本来查看每个块的输出形状。
X=torch.randn(size=(1,1,224,242))
for layer in net:
    X=layer(X)
    print(layer.__class__.__name__,'output shape\t',X.shape)
"""结果输出:
Sequential output shape:     torch.Size([1, 96, 54, 54])
MaxPool2d output shape:      torch.Size([1, 96, 26, 26])
Sequential output shape:     torch.Size([1, 256, 26, 26])
MaxPool2d output shape:      torch.Size([1, 256, 12, 12])
Sequential output shape:     torch.Size([1, 384, 12, 12])
MaxPool2d output shape:      torch.Size([1, 384, 5, 5])
Dropout output shape:        torch.Size([1, 384, 5, 5])
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])
"""



"""训练模型"""
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())
"""结果输出:
loss 0.563, train acc 0.786, test acc 0.790
3087.6 examples/sec on cuda:0"""

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多维时序 | Matlab实现GRO-CNN-LSTM-Attention淘金算法优化卷积神经网络-长短期记忆网络结合注意力机制多变量时间序列预测

多维时序 | Matlab实现GRO-CNN-LSTM-Attention淘金算法优化卷积神经网络-长短期记忆网络结合注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现GRO-CNN-LSTM-Attention淘金算法优化卷积神经网络-长短期记忆网络结合注意力机制多变量时间序列预测效果一览基本介绍程序设…

养猫家庭怎么挑选宠物空气净化器?猫用空气净化器推荐来了!

宠物空气净化器在近年来越来越受到关注,它们被宣传为解决宠物家庭空气质量问题的神器。然而,一些人认为宠物空气净化器只是商家们利用人们对宠物的爱而推出的一种所谓的“智商税”,那么作为一位养猫多年的铲屎官,我可以说宠物空气…

【c++】入门4

内联函数声明和定义不能分开 inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址 了,链接就会找不到。 auto关键字 随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在&…

EfficientSAM 代码推理

SA网站主页:Segment Anything | Meta AI 论文主页:EfficientSAM 代码地址:https://github.com/yformer/EfficientSAM 官方给的推理代码是CPU版本的,如果想使用GPU推理需要自己修改一下 经过推理测试3090GPU,官方测试…

【TypeScript】入门基础知识

目前在做项目的技术栈是 reacttypescript,之前只知道 ts 是 js 的扩展,增加了类型检查,但是没有仔细的学过,纯纯看别人代码上手 anyscript(这很难评...)。趁着最近空闲,就学习一下 ts 的基础知识…

Windows10下 tensorflow-gpu 配置

越来越多的的人入坑机器学习,深度学习,tensorflow 作为目前十分流行又强大的一个框架,自然会有越来越多的新人(我也刚入门)准备使用,一般装的都是 CPU 版的 tensorflow,然而使用 GPU 跑 tensorf…

Linux的DNS域名解析服务

一.DNS基础 1.1 DNS简介 DNS域名系统 (Domain Name System 缩写为:DNS)是因特网的一项核心服务,它作为可以将 域名 和 IP地址 相互映射的一个分布式数据库,能够使人更加方便的访问互联网,而不用去记住能够…

【CCNet】《CCNet:Criss-Cross Attention for Semantic Segmentation》

ICCV-2019 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method5 Experiments5.1 Datasets and Metrics5.2 Experiments on Cityscapess5.3 Experiments on ADE20K5.4 Experiments on COCO 6 Conclusion(own) 1 Ba…

GEM5 McPAT教程:源代码解读McPAT NoC功耗 arbiter部分

简介 McPAT用的很多,大多只是写个python或perl脚本替换xml文件.没有深入到为什么xml脚本这些值要换,以及这写填进去xml的值是怎么影响计算的.本问从源代码一步步读下来,解释每一步是如何计算的. power 构成: 动态功耗其实更相关于energy McPAT的power 核心是两类,动态和静态…

新年的第一个项目管理计划借助工具制定,真高效!

年终总结刚提交没多久,新年的第一个项目就接踵而来了,是一个中大型项目,也是我做的比较少的类型。之前主要做一些中小型项目,项目的交付周期不长、所需资源也较少,基本上都能顺利的交付,所以一般简要规划下…

【设计模式-6】建造者模式的实现与框架中的应用

建造者模式又被成为生成器模式,是一种使用频率比较低,相对复杂的创建型模式,在很多源码框架中可以看到建造者的使用场景,稍后我们会在本文末尾展示几个框架的使用案例。  建造者模式所构造的对象通常是比较复杂而且庞大的&#x…

PaddleSeg的训练与测试推理全流程(超级详细)

LeNet模型量化 参考文档一.下载项目地址:https://gitee.com/paddlepaddle/PaddleSeg/tree/release%2F2.5/特别注意下载版本: 二.paddlepaddle-gpu安装1.环境安装参考文档:https://gitee.com/paddlepaddle/PaddleSeg/blob/release/2.8/docs/in…

x-cmd pkg | pypinyi - 汉字拼音转换工具

目录 简介首次用户功能特点相关工具进一步探索 简介 pypinyin 是一个汉字拼音转换工具,支持多种词库,多种输出格式,支持自定义词组拼音库或单字拼音库。 首次用户 使用 x env use pypinyin 即可自动下载并使用 在终端运行 eval "$(cur…

计算机中vcruntime140.dll丢失如何修复,马上教会你

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“VCRuntime140.dll丢失”。VCRuntime140.dll是Visual C Redistributable Packages的一部分,它提供了许多常用的运行时函数。当这个文件丢失或损坏时,可能会导致某些应…

Python如何对csv文件进行操作

csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存储为csv文件,文件内容是: No.,Name,Age,Score1,mayi,18,99 2,jack,21,89 3,tom,25,95 4,rain,19,80 假设上述csv文件保存…

基于STM32F103C8T6单片机的DHT11温湿度传感器与OLED显示屏实时动态数据监测系统设计

标题: 摘要: 本文提出了一种利用STM32F103C8T6微控制器,结合DHT11数字温湿度传感器和OLED显示屏实现环境温湿度实时、直观显示的方法。该系统通过低功耗且精确的DHT11传感器获取环境温湿度信息,并借助于STM32F103C8T6强大的处理能…

大模型学习之书生·浦语大模型3——基于InternLM和LangChain搭建知识库

基于InternLM和LangChain搭建知识库 1 大模型开发范式 LLM的局限性 知识受限:最新知识无法实时获取专业能力有限:有广度无深度定制化成本高:训练成本高 RAG VS Finetune RAG: 无需重新训练组织外挂加入知识容易受基座模型的影响…

软件测试|解读Python的requirements.txt文件:管理项目依赖的完整指南

简介 在Python项目中,管理依赖库是必不可少的。requirements.txt文件是一种常用的方式,用于列出项目所需的所有依赖库及其版本。本文将详细介绍requirements.txt的用法,帮助你更好地管理项目的依赖。 使用步骤 创建requirements.txt文件&am…

Linux之Iptables简易应用

文档形成时期:2009-2024年 和iptables打交道有15年了,经过无数实践后,形成一个简易应用文档。 文档主题是简易应用,所以其原理不详述了。 因软件世界之复杂和个人能力之限,难免疏漏和错误,欢迎指正。 文章目…

强化app广告变现用户隐私合规,移动广告变现合规技巧

移动广告技术的发展帮助开发者极大提升了广告变现效率,APP作为用户个人信息处理的重要载体,自从《个人信息保护法》颁布以来,个人信息的使用已经成为监管重点,开发者强化合规意识,让广告变现业务“细水长流”&#xff…
最新文章