各位同学好,今天和大家分享一下如何使用 Tensorflow 构建 ResNeXt 神经网络模型,通过案例实战 ResNeXt 的训练以及预测过程。每个小节的末尾有网络、训练、预测的完整代码。想要数据集的私聊我就行。
ResNeXt 是 ResNet 的改进版,在 bottleneck卷积块 结构上进行了较小的改动,其他都和 ResNet 模块相近,如下图所示,ResNeXt 比 ResNet 的精度更好。
本节只介绍 ResNeXt 的改进部分,想了解 ResNet 网络的,可以看我的这篇文章:
(1)在标准卷积中,输入有多少个通道,卷积核就有多少个通道。
举个例子:若输入的图像shape为5x5x6,一个卷积核的shape为3x3x6,使用3个卷积核,得到的特征图shape为3x3x3。参数量 = 5x5x6x3 = 450
(2)在分组卷积中,每个卷积核只处理部分通道。如下图,红色的卷积核只处理输入图像中红色的两个通道,绿色的卷积核只处理输入图像中间的两个绿色的通道,第三个卷积核只处理黄色的两个通道。此时,每个卷积核有两个通道,每个卷积核生成一个特征图。
举个例子:若输入的图像shape为5x5x6,一个分组卷积核的shape为3x3x2,使用3个分组卷积核,得到的特征图shape为3x3x3。参数量 = 5x5x(6/3)x(3/3)x3 = 5x5x2x1x3 = 150 。可见,分成三组,参数量为原来的三分之一。
因此,分组卷积能够有效地降低参数量和计算量。
代码实现:
论文中的残差单元结构图如下,它们在数学计算上完全等价。
如图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 和 ResNeXt 网络结构对比图,接下来就一层一层堆叠网络就可以了
完整代码展示:
通过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数据。
显示图像如下:
使用.map()函数转换数据集中所有x和y的类型,并将每张图象的像素值映射到[0,1]之间,打乱训练集数据的顺序.shuffle()
在网络编译.compile(),指定损失loss采用交叉熵损失。设置参数from_logits=True,由于网络的输出层没有使用softmax函数将输出的实数转为概率,参数设置为True时,会自动将logits的实数转为概率值,再和真实值计算损失,这里的真实值y是经过onehot编码之后的结果。
训练过程中的损失值和准确率如下:
history 中保存了本轮训练的信息,由于没有使用预训练权重,模型的训练损失和准确率波动比较大,但准确率还是可以的。并且训练时设置了回调函数callbacks,只保存验证集损失最小时的权重参数。
绘制损失曲线和准确率曲线
训练阶段一定要注意 batch_size 的大小,batch_size 设置的越大,越容易导致显存爆炸,要改的话最好设置2的n次方
以对整个测试集的图片预测为例,test_ds 存放测试集的图片和类别标签,对测试集进行和训练集相同的预处理方法,将像素值映射到0-1之间。
model.predict(img) 返回的是每张图片属于每个类别的概率,需要找到概率最大值所对应的索引 np.argmax(result),该索引对应的分类名称就是最终预测结果。
打印前10组预测结果
生成真实值和预测值的对比热力图可以观察整个测试集的预测情况
完整代码如下:
到此这篇resnet50有多少个卷积层(resnet50卷积层数)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/36031.html