简单记录一下遇到的坑
用caffe训练网络的时候遇到了一个大坑,我原先训有一个模型A,然后增加A网络的中后段的通道数从而得到B网络,也就是说B有一半的结构跟A相同,网络层的名称完全相同。
我在训练B网络时,用A的权重对B网络进行初始化,结果一训就崩。。。错误提示为“scale_layer.cpp:123] Check failed: bottom[0]->shape(axis_ + i) == scale->shape(i) (256 vs. 96) dimension mismatch between bottom[0]->shape(1) and scale->shape(0)”,说Scale层数据尺寸对不上,后来定位到崩溃的是BN中的scale层
最终问题是,A、B网络中有相同名称、不同通道数的scale层,用A权重对B做初始化,会把A中后段的scale通道数赋值给B的scale,进而造成B网络前向运算时Scale和BatchNorm层的通道数不一致,无法正常运行。如果直接训练B网络,而不使用A权重对其初始化,则可以正常训练。
不过还有一个问题没有想明白,如果是上述原因,BatchNorm层也应该会报错,实际上却未见BatchNorm的报错

349

被折叠的 条评论
为什么被折叠?



