1. 程式人生 > >【caffe】問題記錄:"caffe.LayerParameter" has no field named "batch_norm_param".

【caffe】問題記錄:"caffe.LayerParameter" has no field named "batch_norm_param".

  今天使用caffe訓練resnet50的一個二分類模型,在模型訓練好後,打算用Python指令碼載入網路定義檔案deploy.prototxt測模型輸出的準確率時,出現瞭如下錯誤,折騰了好久才解決,在此記錄一下,為同樣碰到此問題的人提供一個trouble shooting的思路。

[libprotobuf ERROR google/protobuf/text_format.cc:274] Error parsing text-format caffe.NetParameter: 25:26: Message type "caffe.LayerParameter" has no field named 
"batch_norm_param". WARNING: Logging before InitGoogleLogging() is written to STDERR F1113 00:15:43.599743 701 upgrade_proto.cpp:928] Check failed: ReadProtoFromTextFile(param_file, param) Failed to parse NetParameter file: /home/****/ResNet50/deploy.prototxt *** Check failure stack trace: *** 已放棄 (核心已轉儲)

 

分析:

  ①首先,根據打出的日誌,找到deploy.prototxt檔案出錯的位置,如下:


                                 

  再檢視使用的caffe版本是否含有該層及引數,路徑及檔案如下:

  

  開啟該檔案,若找不到錯誤顯示的引數則是caffe版本的原因(缺少該層的定義檔案,下載更新版本的caffe再編譯安裝);

  若找到該引數,說明使用的caffe沒有問題(和我一樣),如下:

  

  ②檢查使用的caffe是否編譯了Python介面,建議輸入以下命令進行重新編譯一遍,

make clean
make all -j4
make test -j4
make runtest
sudo make pycaffe

  ③檢查Python指令碼是否添加了caffe的Python介面到系統變數,如下:

caffe_root = '/home/*****/ssd-caffe/'  # 修改成你的Caffe專案路徑
sys.path.append(caffe_root + 'python')
import caffe

  ④如果還未解決問題,則檢查你的計算機是否編譯了多個版本的caffe,此時我們需要檢視~/.bashrc檔案,我們在指令碼中即使添加了使用的caffe到Python系統環境變數,系統還是會呼叫~/.bashrc檔案中的Python預設路徑,開啟該檔案,export出你使用的caffe的Python環境路徑,如下:

vi ~/.bashrc

  

source ~/.bashrc

  OK,問題解決!重新run一下,程式順利跑通。