用Python重写resnet配置文件.prototxt

版权声明:学无止境,好好学习 https://blog.csdn.net/m0_38116269/article/details/88250760
写代码时的发现

小前言:理论跟实践相结合才是王道啊,阅读代码是有些理论不动,顺便查阅资料,然后根据自己的理解记录下来。
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) Unknown layer type: ReLu (known types: AbsVal, Accuracy, ArgMax, BNLL, BatchNorm, BatchReindex, Bias, Clip, Concat, ContrastiveLoss, Convolution, Crop, Data, Deconvolution, Dropout, DummyData, ELU, Eltwise, Embed, EuclideanLoss, Exp, Filter, Flatten, HDF5Data, HDF5Output, HingeLoss, Im2col, ImageData, InfogainLoss, InnerProduct, Input, LRN, LSTM, LSTMUnit, Log, MVN, MemoryData, MultinomialLogisticLoss, PReLU, Parameter, Pooling, Power, Python, RNN, ReLU, Reduction, Reshape, SPP, Scale, Sigmoid, SigmoidCrossEntropyLoss, Silence, Slice, Softmax, SoftmaxWithLoss, Split, Swish, TanH, Threshold, Tile, WindowData)
*** Check failure stack trace: ***
    @     0x7f3ae5b9b5cd  google::LogMessage::Fail()
    @     0x7f3ae5b9d433  google::LogMessage::SendToLog()
    @     0x7f3ae5b9b15b  google::LogMessage::Flush()
    @     0x7f3ae5b9de1e  google::LogMessageFatal::~LogMessageFatal()
    @     0x7f3ae61c73bc  caffe::Net<>::Init()
    @     0x7f3ae61c8ace  caffe::Net<>::Net()
    @     0x7f3ae634d50a  caffe::Solver<>::InitTrainNet()
    @     0x7f3ae634e9d5  caffe::Solver<>::Init()
    @     0x7f3ae634ecef  caffe::Solver<>::Solver()
    @     0x7f3ae61e0d51  caffe::Creator_SGDSolver<>()
    @           0x40a758  train()
    @           0x407548  main
    @     0x7f3ae4331830  __libc_start_main
    @           0x407e19  _start
    @              (nil)  (unknown)
Aborted (core dumped)

真的是,caffe里面太敏感了,连大小写都要区分。是ReLU不是Relu!!!

another wrong:

F0307 16:01:53.885807 59007 eltwise_layer.cpp:34] Check failed: bottom[0]->shape() == bottom[i]->shape() bottom[0]: 8 128 56 56 (3211264), bottom[1]: 8 128 28 28 (802816)
*** Check failure stack trace: ***
    @     0x7f82c6e205cd  google::LogMessage::Fail()
    @     0x7f82c6e22433  google::LogMessage::SendToLog()
    @     0x7f82c6e2015b  google::LogMessage::Flush()
    @     0x7f82c6e22e1e  google::LogMessageFatal::~LogMessageFatal()
    @     0x7f82c754acfc  caffe::EltwiseLayer<>::Reshape()
    @     0x7f82c744b397  caffe::Net<>::Init()
    @     0x7f82c744dace  caffe::Net<>::Net()
    @     0x7f82c75d250a  caffe::Solver<>::InitTrainNet()
    @     0x7f82c75d39d5  caffe::Solver<>::Init()
    @     0x7f82c75d3cef  caffe::Solver<>::Solver()
    @     0x7f82c7465d51  caffe::Creator_SGDSolver<>()
    @           0x40a758  train()
    @           0x407548  main
    @     0x7f82c55b6830  __libc_start_main
    @           0x407e19  _start
    @              (nil)  (unknown)
Aborted (core dumped)

Reason: the lay parameter is wrong.

参考文献:Caffe学习笔记(四):使用pycaffe生成train.prototxt、test.prototxt文件
学习的时候经常看见崔学长的博客,写的真是不错,思路清晰,目前跟学长还有差距,加油呀!

猜你喜欢

转载自blog.csdn.net/m0_38116269/article/details/88250760