2016-11-29 71 views
1

我使用下面的代碼來加載網絡並對其進行設置,圖層的參數存儲在deploy.prototxt中。動態修改Caffe中的圖層參數

net = caffe.Net(deploy.prototxt, caffemodel, caffe.TEST)

然而,我想要做的是修改層的參數(例如kernel_size,或者pad等)動態代替修改prototxt文件和重新裝入。 有沒有辦法做到這一點?

回答

0

你可以編寫自己的get/set方法,並將它們暴露給python。 在layer.hpp:

virtual float GetParameter(const std::string param_name) {return -1;} 
virtual void SetParameter(const std::string param_name, float val) {} 

然後重新定義層,其中要動態獲取/設置參數這些方法。

最後一步是將方法暴露給python。在_caffe.cpp添加此爲bp::class_<Layer...

.def("get_parameter", &Layer<Dtype>::GetParameter) 
.def("set_parameter", &Layer<Dtype>::SetParameter) 
+0

感謝您的回答。我已經通過目錄另外解決了動態改變.prototxt文件的問題,我認爲你的解決方案會更加靈活。 – zbqv

0

我建議你改變認爲這個問題的辦法。它是什麼取決於你提到的「動態修改參數」?最常用的變量(我正面臨)是當前的迭代時間。例如,我想每10000次減少參數值。基於此,在使用該參數的圖層中,應用該功能對其進行修改。這與修改原型文件相同。

爲了獲得特定圖層的迭代次數,我只是在這裏放置另一個解決方案。與修改原型文件相比,它非常簡單,可能會顯着減少您的工作量。希望你能從這個解決方案中獲得靈感,並將其應用於你的案例。

https://stackoverflow.com/a/38386603/6591990