ResNet模型

news/2024/10/21 10:03:06/

使用pytoch实现

1.卷积神经网络

 conv2d的参数很简单

conv2d(input_channels, output_channels,kernel_size, stride, padding)

参数分别是输入通道,输出通道,卷积核大小,移动步长,填充数量。

输入通道是特征图的深度,输出通道是输出特征图的深度,卷积核大小一般取值1,3,5,7;

移动步长就是卷积核在特征图上每次移动的长度,取值不一样就会导致特征图的大小不一样,比如取值为2,则特征图会变得只有原图的一半大小。

如果想要特征图输出保持原本的大小,则需要在stride=1的前提下,padding = 0,建议padding的取值等于padding = stride/2向上取整。

2.残缺网络

resnet是一系列残缺网络结合起来的,其架构如图所示,

class ResLayer(nn.Module):
    def __init__(self,inputChannels, outputChannels, kernelSize, strides):
        super().__init__()
        paddings = int(kernelSize/2)
        self.convKernel_1 = nn.Conv2d(in_channels= inputChannels,out_channels=outputChannels,
                                      kernel_size=kernelSize, stride=1, padding=paddings)
        self.convKernel_2 = nn.Conv2d(in_channels= outputChannels,
                                      out_channels=outputChannels, kernel_size=kernelSize, stride=strides, padding=paddings)
        self.bn = nn.BatchNorm2d(outputChannels)
        self.activation = nn.ReLU()
        self.conv = nn.Conv2d(in_channels= inputChannels, out_channels=outputChannels,
                              kernel_size=1, stride=strides, padding=0)
        
    def forward(self, inputs):
        x = self.convKernel_1(inputs)
        x = self.bn(x)
        x = self.activation(x)
        x = self.convKernel_2(x)
        x = self.bn(x)
        x = self.activation(x)
        X = self.conv(inputs)
        x = x + X
        return x

 这个残差网络第一层的stride=1,第二层的stride=2,因此到输出时,特征图为原来的一半,所有当输出x与输入的特征图X相加时,旁边有一个卷积核大小为1*1的卷积层,stride=2,padding=0,到输出的时候才能匹配好维度。


http://www.ppmy.cn/news/1538674.html

相关文章

【详细教程】如何使用YOLOv11进行图像与视频的目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

MySQL 8.4修改初始化后的默认密码

MySQL 8.4修改初始化后的默认密码 (1)初始化mysql: mysqld --initialize --console (2)之后,mysql会生成一个默认复杂的密码,如果打算修改这个密码,可以先用旧密码登录: mysql -u…

vite 打包前请求接口和打包后的不一致

在使用 Vite 进行项目打包时,如果发现打包前请求接口和打包后的行为不一致,这可能是由于多种原因导致的。以下是一些可能的原因和相应的解决方案: 1. 代理配置问题 开发环境:在开发环境中,Vite 通常使用 vite.config…

处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优

处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优 在进行压力测试时,遇到java.lang.OutOfMemoryError: Java heap space错误或者nginx报错no live upstreams while connecting to upstream通常意味着应用的…

JAVA学习-练习试用Java实现“Excel表列序号”

问题: 给定一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回该列名称对应的列序号。 例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 示例 1: 输入: columnTitle "A" 输出: 1 示例…

Guitar Pro怎么制作伴奏谱,吉他谱制作软件guitar pro教程

在诸多教学吉他谱制作软件中Guitar Pro是一款非常优秀的软件,它是专为吉他和其他弦乐器设计,且能提供乐谱编辑、音轨录制和播放、和弦与音阶库等功能的强大软件。Guitar Pro不仅具有强大的乐谱编辑功能,其用户界面也易于上手,更支…

web1.0,web2.0,web3.0 有什么区别 详解

Web 的发展经历了多个阶段,每个阶段都有其独特的特点和技术进步。下面是 Web 1.0、Web 2.0 和 Web 3.0 之间的主要区别和详细解释: Web 1.0 时间范围:大约在 1991 年至 1995 年。 Web 1.0 是互联网的最初形态,也被称为静态 Web…

【原创】MacOS 上Android Studio 登录问题解决方法

在 Android Studio 右上角有一个用户登录的按钮。 登录之后,可以启用 Google 的人工智能代码填写功能插件,目前虽然是预览版,但是毕竟好奇,想用一用。 错误做法 按照正常流程打开:启动台-> Android Studio 点击登…