当前位置:网站首页 > R语言数据分析 > 正文

resnet50有多少个卷积层(resnet50卷积层数)



各位同学好,今天和大家分享一下如何使用 Tensorflow 构建 ResNeXt 神经网络模型,通过案例实战 ResNeXt 的训练以及预测过程。每个小节的末尾有网络、训练、预测的完整代码。想要数据集的私聊我就行。


ResNeXt 是 ResNet 的改进版,在 bottleneck卷积块 结构上进行了较小的改动,其他都和 ResNet 模块相近,如下图所示,ResNeXt 比 ResNet 的精度更好。

本节只介绍 ResNeXt 的改进部分,想了解 ResNet 网络的,可以看我的这篇文章:

resnet分类 pytorch_cnn


(1)在标准卷积中输入有多少个通道,卷积核就有多少个通道。

举个例子:若输入的图像shape为5x5x6,一个卷积核的shape为3x3x6,使用3个卷积核,得到的特征图shape为3x3x3。参数量 = 5x5x6x3 = 450

resnet分类 pytorch_tensorflow_02

(2)在分组卷积中每个卷积核只处理部分通道。如下图,红色的卷积核只处理输入图像中红色的两个通道,绿色的卷积核只处理输入图像中间的两个绿色的通道,第三个卷积核只处理黄色的两个通道。此时,每个卷积核有两个通道,每个卷积核生成一个特征图

举个例子:若输入的图像shape为5x5x6,一个分组卷积核的shape为3x3x2,使用3个分组卷积核,得到的特征图shape为3x3x3。参数量 = 5x5x(6/3)x(3/3)x3 = 5x5x2x1x3 = 150 。可见,分成三组,参数量为原来的三分之一。

因此,分组卷积能够有效地降低参数量和计算

resnet分类 pytorch_深度学习_03

代码实现:


论文中的残差单元结构图如下,它们在数学计算上完全等价。

如图c,首先经过1x1卷积下降通道数 [h,w,256]==>[h,w,128];然后经过3x3分组卷积提取特征;再经过1x1卷积上升通道数 [h,w,128]==>[h,w,256];最后,如果输入和输出的shape相同,通过残差连接输入和输出。

如图b,可以理解为,第一层的32个1x1卷积相当于图c的第一个1x1卷积;第二三层的将分组卷积的结果在通道上堆叠,就是图c的3x3分组卷积

resnet分类 pytorch_神经网络_04

代码实现


下图是 ResNet 和 ResNeXt 网络结构对比图,接下来就一层一层堆叠网络就可以了

resnet分类 pytorch_tensorflow_05

完整代码展示:

通过model.summary()查看网络参数量


我是用的GPU训练网络,先将各种包导入进来,并设置GPU内存占用,防止内存爆炸。


接下来,在文件夹中图片数据以测试集、验证集、测试集分类。

函数 tf.keras.preprocessing.image_dataset_from_directory() 构造数据集,

分批次读取图片数据,参数 img_size 会对读进来的图片resize成指定大小;参数 label_mode 中,'int'代表目标值y是数值类型索引,即0, 1, 2, 3等;'categorical'代表onehot类型,对应正确类别的索引的值为1,如图像属于第二类则表示为0,1,0,0,0;'binary'代表二分类


接下来绘图查看图像信息,iter()生成迭代器,配合next()每次运行取出训练集中的一个batch数据

显示图像如下:

resnet分类 pytorch_深度学习_06


使用.map()函数转换数据集中所有x和y的类型,并将每张图象的像素值映射到[0,1]之间打乱训练集数据的顺序.shuffle()


在网络编译.compile(),指定损失loss采用交叉熵损失。设置参数from_logits=True,由于网络的输出层没有使用softmax函数将输出的实数转为概率,参数设置为True时,会自动将logits的实数转为概率值,再和真实值计算损失,这里的真实值y是经过onehot编码之后的结果

训练过程中的损失值和准确率如下:


history 中保存了本轮训练的信息,由于没有使用预训练权重,模型的训练损失和准确率波动比较大,但准确率还是可以的。并且训练时设置了回调函数callbacks,只保存验证集损失最小时的权重参数。

绘制损失曲线和准确率曲线

resnet分类 pytorch_cnn_07


训练阶段一定要注意 batch_size 的大小,batch_size 设置的越大,越容易导致显存爆炸,要改的话最好设置2的n次方


以对整个测试集的图片预测为例,test_ds 存放测试集的图片和类别标签,对测试集进行和训练集相同的预处理方法,将像素值映射到0-1之间。

model.predict(img) 返回的是每张图片属于每个类别的概率,需要找到概率最大值所对应的索引 np.argmax(result),该索引对应的分类名称就是最终预测结果。

打印前10组预测结果

生成真实值和预测值的对比热力图可以观察整个测试集的预测情况

resnet分类 pytorch_深度学习_08

完整代码如下:

到此这篇resnet50有多少个卷积层(resnet50卷积层数)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • swagger2配置实体类不生效(swagger怎么配置)2025-02-21 18:18:06
  • nsenter命令详解(ntsd命令)2025-02-21 18:18:06
  • oracle教程文档(oracle12教程)2025-02-21 18:18:06
  • druid未授权访问漏洞修复修改(druid 未授权访问)2025-02-21 18:18:06
  • druid怎么读(drury 怎么读)2025-02-21 18:18:06
  • aurocean怎么读(auroral怎么读)2025-02-21 18:18:06
  • 7400pro提示纸盒无纸(m7400提示纸盒无纸)2025-02-21 18:18:06
  • rmsprop算法怎么读(prim算法)2025-02-21 18:18:06
  • resnet模型结构(resnet18模型)2025-02-21 18:18:06
  • tprimegte怎么读(treatmet怎么读)2025-02-21 18:18:06
  • 全屏图片