scale層報錯

簡單記錄一下遇到的坑

用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的報錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章