[英]Layer drop and update caffe model
我需要從現有的caffe模型中更新caffe模型,在其中我將刪除最后兩層。 需要減小Caffe模型的大小,以便部署起來更容易和更小。 假設我現有的caffe模型是A1.caffemodel ,它具有5個卷積層和3個完全連接的層 。 我想從中生成一個名為B1.caffemodel的新模型,它將具有5個卷積層和1個完全連接的層 (丟棄了最后2個fc層)。
感謝您提出的所有寶貴建議和有用的代碼段。
完全連接的層確實可能非常重。 請查看Girshick在R Fast-RCNN ICCV 2015上的 “ 3.1截斷SVD以更快地進行檢測” 部分,其中描述了如何使用SVD技巧來顯着減少全連接層的負擔。 因此,您可以用6個非常薄的層替換三個完全連接的層。
從模型A
到B
:
創建B.prototxt
,它具有5個卷積層, 並具有與 A
相同的"name"
。
為B
的單個完全連接層賦予A
中不存在的新"name"
。
在python中
import caffe B = caffe.Net('/path/to/B.prototxt', '/path/to/weights_A.caffemodel', caffe.TEST) B.save('/path/to/weights_B.caffemodel')
現在,您具有的B
的權重與所有卷積層的A
的權重相同,而對於新的單個完全連接層的權重則是隨機的。
從'/path/to/weights_B.caffemodel'
開始微調模型B
,以學習新的單個完全連接層的權重。
C ++實現:
Net<float> caffe_net("B.prototxt", caffe::TEST);
caffe_net.CopyTrainedLayersFrom("A.caffemodel");
caffe::NetParameter net_param;
caffe_net.ToProto(&net_param);
caffe::WriteProtoToBinaryFile(net_param, "B.caffemodel");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.