写代码时的发现
小前言:理论跟实践相结合才是王道啊,阅读代码是有些理论不动,顺便查阅资料,然后根据自己的理解记录下来。
1.其中发现代码中Relu层和BatchNorm层,还有Scale使用了in_place = True操作,发现,只有当输入输出都是一样的情况下才可以这样操作。
参考博客caffe中的in-place操作
2.对resnet中加入的BatchNorm和Scale的理解
这是批量正则化,对一批数据的操作是,求均值,求方差,做归一化,进行平移和缩放。
其中BatchNorm是进行的归一化,Scale进行的是平移和缩放,均值和方差是数据累积计算出来的,后向传播链式法则求导得到的alpha and beta。caffe中的bn层和scale层
公式如下,
写的很清晰啊。
作用:能够让我们敢大胆得增大学习率,提高优化效率。他减少了数据之间的差异性。caffe中常用层: BatchNorm层详解
3.对于卷积层参数的理解
这个看了许多遍了,老是忘,模棱两可可不行,得多看几遍最后肯定会记住的。
http://caffecn.cn/?/question/158
4.caffe 下一些参数的设置
这个博客写的很清晰,对我很有帮助,感谢了。其中,知道了,
moving_average_fraction, 代表训练是均值方差的更新速度。
caffe 下与loss相关的一些说明:
1 train loss 不断下降,test loss 不断下降,说明网络正在学习
2 train loss 不断下降,test loss 趋于不变,说明网络过拟合
3 train loss 趋于不变,test loss 趋于不变,说明学习遇到瓶颈,需要减小学习率或者批处理大小
4 train loss 趋于不变,test loss 不断下降,说明数据集100%有问题
5 train loss 不断上升,test loss 不断上升(最终变为NaN),可能是网络结构设计不当,训练超参数设置不当,程序bug等某个问题引起
6 train loss 不断上下跳动,可能引起的原因:学习率过大,或者批处理大小太小
真的是由一个问题又引出若干的问题啊。。。现在想知道批处理大小有啥影响啊?
噗。。。我又不知道epoch是啥东西了。感谢这个回答,非常清晰。
噗。。。epoches和iterations和batches,清楚了,现在又想理解一下前向传播和后向传播在一个神经网络中的过程了。明天再看看,我现在已经偏离了原来做的事情了。
5.遇到can’t assign this 什么玩意,原来是变量名的命名不能有 -这个字符。。。
something went wrong:
I0307 15:53:32.477352 57404 layer_factory.hpp:77] Creating layer conv1_relu
F0307 15:53:32.477376 57404 layer_factory.hpp:81] Check failed: registry.count(type) == 1 (0 vs. 1<