resnet模型结构(resnet18模型)

resnet模型结构(resnet18模型)Resnet18 结构如下 可以看到 18 层的网络有五个部分组成 从 conv2 开始 每层都有两个有残差块 并且每个残差块具有 2 个卷积层 开头没有残差块的结构为 layer 1 之后每四个 conv 为一个 layer 对应上图蓝 layer 2 棕 layer 3 黄 layer 4 粉 layer 5 四种颜色 需要注意的是 从 conv3 开始 第一个残差块的第一个卷积层的 stride 为 2

大家好,我是讯享网,很高兴认识大家。



Resnet18结构如下:

resnet 18 ResNet18结构_人工智能
讯享网

可以看到,18层的网络有五个部分组成,从conv2开始,每层都有两个有残差块,并且每个残差块具有2个卷积层。开头没有残差块的结构为layer_1,之后每四个conv为一个layer(对应上图蓝(layer_2)、棕(layer_3)、黄(layer_4)、粉(layer_5)四种颜色)。

需要注意的是,从conv3开始,第一个残差块的第一个卷积层的stride为2,这是每层图片尺寸变化的原因。另外,stride为2的时候,每层的维度也就是channel也发生了变化,这这时候,残差与输出不是直接相连的,因为维度不匹配,需要进行升维,也就是上图中虚线连接的残差块,实线部分代表可以直接相加。


Resnet18代码块:

一、首先是BasicBlock残差块的基本结构:

1、主通道:两个卷积层,及两个Batchnorm和Relu。

2、捷径(shortcut):分两种情况:第一种是输入和输出通道数相等(in_channels == out_channels),这里还给出一个stride的判断条件(stride在这个结构中一般为1,若为2时,说明残差块的输入和输出通道数不相等),当输入和输出通道数相等时,不需要改变通道数的维度,直接执行:

self.shortcut = nn.Sequential() #此时捷径的输出等于输入

第二种是输入和输出通道数不相等(in_channels == out_channels),以及stride==2,此时为了使输入和输出通道数相等(方便后面进行矩阵相加操作),进行改变通道数维度操作:

通过以上两种情况后,在每一个残差块的运行中,一个输入经过主通道(两次卷积)得到主通道输出,再加上输入经过捷径(shortcut)的输出,将得到的加和值通过激活函数Relu后得到一个残差块的最终输出out。

二、Restnet块:

先执行larer_1,再执行后面四个layer,最后以一个平均池化和全连接层输出结束。

以layer_2举例(下图蓝色部分):

resnet 18 ResNet18结构_resnet 18_02

  

在layer_2里有两个残差块,要调用两次BasicBlock残差块,这里运用到了_make_layer方法,主要是用来,重复同一个残差块。

self.conv2 = self._make_layer(BasicBlock,64,[[1,1],[1,1]])

_make_layer方法里需指出运用什么残差块(这里运用的是BasicBlock),第一层卷积所需输出的通道数,以及四个卷积的s值(这里用列表strides表示,strides=[[1,1],[1,1]],用for循环取出,因为一个残差块有两层卷积,故一次取出两个s值,stride[0]=[1,1],stride[1]=[1,1]),进入for循环后执行stride[0],block = BasicBlock的操作,并将执行一个残差块的运行步骤存入空列表layers中,将该残差块的第一个卷积输出的通道维度赋给第二个卷积的输入通道维度,再执行stride[1],block = BasicBlock的操作,并将执行的第二个残差块的运行步骤存入列表layers中,此时的列表含有两个残差块的运行步骤,最后return传给conv2。

layers的内容(两个layer组成一个layers):

conv2的内容:

在全连接层后,最后执行前向传播,将输入值x传入,按步骤计算所有layer,输出结果out。

在外部调用Resnet时要传入残差块参数block,这里为BasicBlock

lk = ResNet18(BasicBlock)



最后一轮epoch=50的正确率达到82%

tensorboard上的测试集正确率如下:

resnet 18 ResNet18结构_ide_03

但在二十轮之后测试集的损失反而有所上升,这与LeNet神经网络后期类似。

resnet 18 ResNet18结构_2d_04

 Resnet18训练效果与LeNet神经网络和VGG16模型的训练效果相比,Resnet18的测试集正确率最高,效果最好。


如何进一步提高Resnet18训练CIFAR10数据集的正确率呢?

1、由于CIFAR10的图片格式是3*32*32,输入尺寸为(64,3,32,32),而论文的Resnet18结构的第一层卷积用的过滤器尺寸为7*7(太大了)。

nn.Conv2d(3,64,kernel_size=7,stride=2,padding=3,bias=False)

resnet 18 ResNet18结构_resnet 18_05

更改为:nn.Conv2d(3,64,kernel_size=3,stride=2,padding=1,bias=False)/2、

2、输入图片高度和宽度维度为32,在到达layer_5时维度就以及降至2,而过滤器的尺寸依旧为3*3,不合理,或许可以将layer_5直接去除?

小讯
上一篇 2025-06-10 23:50
下一篇 2025-05-27 12:24

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/192227.html