ResNet+cifar10总结-由浅入深

文章目录

一、经典神经网络ResNet介绍

随着神经网络(比如VGGNet16,VGGNet19)的层数不断加深,错误率也越来越低(能够提取到不同level的特征越丰富。并且,越深的网络提取的特征越抽象,越具有语义信息),但增加网络深度的同时,我们还要考虑梯度消失的问题以及退化问题(网络层数增加,梯度消失,在训练集上的准确率却饱和甚至下降)。解决办法,引入残差单元。
转载:CNN模型:ResNet模型详细介绍

残差学习单元主要思想改变了ResNet网络的学习目标,在网络中增加了直连通道,允许原始输入信息直接传到后面的层中。假设一段卷积神经网络的输入是x,经过处理后输出为H(x),如果现将x传入输出作为下一段网络的初始结果,我们学习的目标就变为F(x)=H(x)-x,如下图所示。
ResNet+cifar10总结-由浅入深
ResNet网络深度高(152层,VGG才19层),并且采用残差学习的小技巧,使得深度神经网络得以训练,解决了深度网络的退化问题,使得深度网络发挥最大的作用。

二、经典数据集cifar10介绍及处理

转载:Dataset之CIFAR-10:CIFAR-10数据集简介、下载、使用方法之详细攻略

三、构建网络步骤及优化操作

  • 建立一个baseline,使网络能跑起来,输出训练精度与训练损失,测试精度与测试损失,验证精度与验证损失
  • 添加dropout层,优化网络
  • 添加记录损失函数值的功能,加入损失函数的集合,观察训练效果
  • 改变keep_prob值,观察实验效果
  • 添加学习率的优化及改进
  • 在权重参数上实现L2正则化,加入损失函数的集合,观察训练效果
  • 添加tensorboard,进行训练精度与训练损失,测试精度与测试损失,验证精度与验证损失的网络可视化,添加时间戳来记录训练与测试,验证文件夹
  • 保存模型参数,保存精度最高的模型
  • 预加载模型参数进行预测
  • 滑动平均变量的使用来提高预测性能

四、源代码

github源代码链接

五、遇到问题及解决方案

tensorflow使用总结

六、 一般处理思路

1、定义占位符tf.placeholder()生成的变量x,y_,方便后续数据的调用;
2、生成隐藏层和输出层的参数weights,biases;
3、计算前向传播的结果y;
4、定义交叉熵并计算平均交叉熵损失
5、计算L2正则化损失函数
6、总损失等于交叉熵损失和正则化损失的和
7、设置衰减的学习率
8、使用优化函数优化损失
9、定义反向传播优化更新参数的过程
10、检验模型正确率过程
11、初始化会话进行训练,并初始化所有变量
12、生成训练和测试数据集
13、迭代循环神经网络,注意的是:每次取batch数据。
14、评价模型的性能
15、网络可视化tensroboard使用

上一篇:PyTorch对ResNet网络的实现解析


下一篇:Resnet以及相应的变体