resnet网络代码(resnet18代码详解)

resnet网络代码(resnet18代码详解)前言 在前篇 vgg16 之后 无法成功训练 vgg16 发现是自己电脑可用的显存太低了 遂放弃 在 2015 ILSVRC amp COCO 比赛中 何恺明团队提出的 Resnet 网络斩获第一 这是一个经典的网络 李沐说过 如果要学习一个 CNN 网络 一定是残差网络 Resnet 与 VGG 相比 Resnet 则更加出色 为后续的研究做下铺垫 这是 Resnet 论文翻译参考链接 在之前的神经网络

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



前言

在前篇vgg16之后,无法成功训练vgg16,发现是自己电脑可用的显存太低了,遂放弃。

在2015 ILSVRC&COCO比赛中,何恺明团队提出的Resnet网络斩获第一,这是一个经典的网络。李沐说过,如果要学习一个CNN网络,一定是残差网络Resnet。与VGG相比,Resnet则更加出色,为后续的研究做下铺垫

这是Resnet论文翻译参考链接:

在之前的神经网络,存在两个问题:

  1. 网络收敛速度很慢,在用vgg16训练做cifar分类的时候,收敛速度很慢,与resnet相比,收敛速度慢至几倍甚至十倍。而且一旦出现梯度爆炸或者梯度消失,则会影响网络的收敛
  2. 随着网络的加深,准确率达到饱和,然后开始下降。这称之为退化。
  3. resnet源代码 resnet18代码详解_深度学习
    讯享网

  4. 从上面这幅图可以看出,在一定的训练迭代中,适合的浅层网络要比深层网络有更低的训练误差和测试误差

Resnet在当时打破了网络越深,性能越好的共识,而且残差结构能加速学习,使得模型更加容易学习,也能有效地防止梯度爆炸或者消失。

为什么残差网络更容易学习特征?

  1. 从论文中可以看出,Resnet网络没有使用Dropout,而是利用了Bn层和平均池化层进行正则化,有效加快训练。
  2. 使用很少的池化层,间接加快训练
  3. 残差结构能够减少学习压力,在学习过程中,可以通过Shortcut连接学习冗余度比较高的地方,整体看,网络不再依赖整个映射,因此能够学习地更好。
  4. 还有一个可能,Resnet就像是集成学习,将每一个残差模块以某种加权方式学习起来。该观点属于猜测,写下来是为了做个标记,在未来可以根据资料印证。

区分退化和过拟合:

退化:指的是网络深度增加,网络准确度出现饱和,甚至出现下降

过拟合:指的是网络在训练集训练的很好,但是在未知的测试集表现地很差

下图是Resnet系列,包括Resnet18、Resnet34、Resnet50、Resnet101、Resnet152

resnet源代码 resnet18代码详解_resnet源代码_02

在keras中没有找到Resnet18的网络,所以本次复现的是Resnet18,如果有问题,请联系我。本次我根据一些帖子以及pytorch的源码去核对我复现的版本,复现的代码参照了keras源码。

代码
Resnet18
下图是plot_model函数保存下来的Resnet18网络结构,欢迎大家指出问题

resnet源代码 resnet18代码详解_cnn_03

训练

这次依旧训练cifar10,将cifar10分成训练集、验证集、测试集。接下来贴代码,本次训练和上篇vgg16一样,大家可以参照上一篇。按照其他大佬的经验,在不大修改模型的情况下,按照比赛的记录,测试的结果应该在85%+。

训练结果:总共训练了20个epoches,但是在第15-18个epoches时,模型达到比较优秀的结果
接下来 我们取其中第16个epoches做测试,得到结果,准确率大概在88%

补充,其实还有一种方式可以画出keras的结构图。而且是网页版的

https://netron.app/

结果模型我已经放在云盘 欢迎大家下载测试

https://url25.ctfile.com/f/--23a4e6 (访问密码:3005)

小讯
上一篇 2025-05-31 07:43
下一篇 2025-05-26 23:23

相关推荐

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