网络中的网络 NiN

news2024/11/16 18:31:51

目录

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.coloradmin.cn/o/1377669.html

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

相关文章

Rust-类型

bool 布尔类型(bool)代表的是“是”和“否”的二值逻辑。它有两个值:true和false。 一般用在逻辑表达式中,可以执行“与”“或”“非”等运算。 char 字符类型由char表示。它可以描述任何一个符合unicode标准的字符值。在代码中,单个的字符…

【工具栏】RestfulTool 插件的使用(接口开发规范)

目录 1. 安装 2.使用 1. 安装 2.使用 点开控制层,该控制层写了什么接口一目了然 跳转对应的接口,查看代码

使用CloudCompare对obj网格模型转换为pcd/ply点云模型

1.打开CloudCompare,点击文件夹图标,首先先把文件类型选择为.obj,然后再去找预处理的obj网格模型,点击打开。 2.测试打开的obj网格模型如下图: 3.选中obj文件,点击网格上样本点的图标,输入预生成…

计算机毕业设计---SSH协会志愿者服务管理系统

项目介绍 该项目分为前后台,分为管理员与普通用户两种角色,前台为普通用户登录,后台为管理员登录; 管理员角色包含以下功能: 管理员登录,管理员管理,志愿者管理,活动管理,捐赠管理,关于我们管理,友情链接管理,新闻类…

添加 自定义校验方法,让用户自定义校验规则

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器,从编码到发布全过程》 2、相关回顾 添加 常用校…

【分布式微服务专题】SpringSecurity OAuth2快速入门

目录 前言阅读对象阅读导航前置知识笔记正文一、OAuth2 介绍1.1 使用场景*1.2 基本概念(角色)1.3 优缺点 二、OAuth2的设计思路2.1 客户端授权模式2.1.0 基本参数说明2.1.1 授权码模式2.1.2 简化(隐式)模式2.1.3 密码模式2.1.4 客…

Jmerer之FTP测试

1、文件上传下载测试,可以使用sample:FTP请求,当然也可以使用HTTP Request采样器中的File Upload向服务器上传文件 2、本章重点介绍FTP请求进行文件的上传下载测试,添加 FTP请求,界面主要配置如下: Server Name or I…

程序员如何写高水平简历?(附模板)

Q:什么是高水平的简历? A:满足HR需求的同时,最大化的体现自身价值的简历是高水平的简历 HR的需求是什么? ✅ HR想看到清晰专业的简历模板 ——家人们每天看几百份简历谁懂啊!花里胡哨真看不下去一点&…

软件测试当中的测试用例模板

测试用例这块知识、经验,小酋在前面陆续都讲完了。这章提供几种用例模板,作为这块知识的收尾。 - 1 - 测试用例(主指功能测试用例模板)的内容通常包括测试目标(目的),需求标示(一般…

Open CV 图像处理基础:(四)使用 Open CV 在 Java 中进行基本的图片模糊处理

使用 Open CV 在 Java 中进行基本的图片模糊处理 目录 使用 Open CV 在 Java 中进行基本的图片模糊处理方法介绍均值模糊(Averaging Blur):高斯模糊(Gaussian Blur):中值模糊(Median Blur):双边滤波&#x…

软件测试工程师如何对算法做测试?

最近几年,随着大数据、人工智能等领域的快速发展,算法受到前所未有的重视,算法测试也随之兴起。 为了让大家能对算法测试有个初步的了解,这篇文章将对“如何做算法测试”进行梳理,大纲如下: 1、算法测试测…

C++20:从0到1学懂concept

目录 1.concept语法 1.1 替换typename1.2 requires关键字1.4 concept与auto2.编译器支持3.总结 C20引入了concept(概念),是对模板参数(编译时评估)的一组约束。你可以将它们用于类模板和函数模板来控制函数重载和特化。一些优点包括: 对模版参数强制类型…

Mac 下载 nvm 后执行nvm -v 命令报错 nvm: command not found

1、问题:Mac 使用命令下载nvm 成功后执行 nvm -v 查看,报错:nvm command not found 2、原因:可能是系统更新后,默认的 shell 是 zsh,所以找不到配置文件 3、解决:可添加编辑.bash_profile 和 …

(1)(1.13) SiK无线电高级配置(六)

文章目录 前言 15 使用FTDI转USB调试线配置SiK无线电设备 16 强制启动加载程序模式 17 名词解释 前言 本文提供 SiK 遥测无线电(SiK Telemetry Radio)的高级配置信息。它面向"高级用户"和希望更好地了解无线电如何运行的用户。 15 使用FTDI转USB调试线配置SiK无线…

如何在 SwiftUI 中实现音频图表

文章目录 前言DataPoint 结构体BarChartView 结构体ContentView 结构体实现协议实现线图总结 前言 在可访问性方面,图表是复杂的事物之一。iOS 15 引入了一项名为“音频图表”的新功能。 下面我们将学习如何通过使用 accessibilityChartDescriptor 视图修饰符为任…

代码随想录第第五十七天—回文子串,最长回文子序列

leetcode 647. 回文子串 题目链接:回文子串 版本一:动态规划 dp数组及下标的含义 dp[i][j]:区间范围[i, j] (左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。确定递推公式…

C语言用函数指针实现计算器

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现目录函数&#xff1b; void menum() {//打印目录&#xff1b;printf("***********************************************\n");printf("***…

什么是数通技术?以太网交换机在数通技术中的精要

什么是数通技术&#xff1f; 数通技术是指数字通信技术&#xff0c;它涵盖了数字信号处理、数据传输、网络通信等领域。通信工程师在数通技术中负责设计、建设和维护数字通信系统&#xff0c;以实现可靠、高效的信息传输。这涉及到数字信号的编解码、调制解调、数据压缩、网络…

【架构专题】我为什么要写Spring Cloud Alibaba微服务架构实战派上下册这本书?

在写这本书之前&#xff0c;我先后在两家杭州的“独角兽”公司担任技术负责人&#xff0c;并推进公司核心业务的“中台化”改造。在落地业务中台和技术中台的过程中&#xff0c;督促并指导开发人员统一使用Spring Cloud Alibaba作为中台服务最底层的基础框架。为了快速推进业务…

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载)

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载) 什么是自然语言处理 (NLP) ? 自然语言处理 (NLP) 是计算机科学的一个分支,更具体地说,是人工智能 (AI) 的分支,旨在让计算机能够以与人类大致相同的方式理解文本和语音。 自然语…