【機器學習】截取caffe模型中的某層
- 2020 年 10 月 19 日
- AI
一、前言
通常情況下,訓練好的caffe模型包含兩個文件:
- prototxt:網絡結構描述文件,存儲了整個網絡的圖結構;
- caffemodel:權重文件,存儲了模型權重的相關參數和具體信息
對於某些大型的網絡,如果需要對caffe模型中一小部分結構網絡做一些性能或精度分析,可以對caffe模型的結構及權重進行截取。caffe源碼提供了讀取caffe模型的python接口,可以比較方便地進行相應的操作。
二、修改prototxt
以Inception模型為例,如下圖左則為使用Netron可視化的模型前3層及prototxt描述的內容,假設要截取第3層,修改後的模型如下圖右則所示,修改方法為:
- 修改輸入數據的維度為第2層的輸出維度
- 刪除第2層以及第3層後的所有層
- 修改第3層的bottom值為第一層的top值
三、截取權重數據
首先要下載caffe源碼
git clone //github.com/BVLC/caffe
然後使用caffe的python接口讀取修改後的prototxt和原始的權重文件caffemodel,接着重新推理,最後保存新的權重文件。
import sys
caffe_root='/your/path/caffe'
sys.path.insert(0, caffe_root + '/python')
import caffe
net = caffe.Net("Inception.prototxt", "Inception.caffemodel", caffe.TRAIN)
res = net.forward()
net.save('Inception_conv2d_2.caffemodel')