我使用下面的代碼來加載網絡並對其進行設置,圖層的參數存儲在deploy.prototxt
中。動態修改Caffe中的圖層參數
net = caffe.Net(deploy.prototxt, caffemodel, caffe.TEST)
然而,我想要做的是修改層的參數(例如kernel_size
,或者pad
等)動態代替修改prototxt文件和重新裝入。 有沒有辦法做到這一點?
我使用下面的代碼來加載網絡並對其進行設置,圖層的參數存儲在deploy.prototxt
中。動態修改Caffe中的圖層參數
net = caffe.Net(deploy.prototxt, caffemodel, caffe.TEST)
然而,我想要做的是修改層的參數(例如kernel_size
,或者pad
等)動態代替修改prototxt文件和重新裝入。 有沒有辦法做到這一點?
你可以編寫自己的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)
我建議你改變認爲這個問題的辦法。它是什麼取決於你提到的「動態修改參數」?最常用的變量(我正面臨)是當前的迭代時間。例如,我想每10000次減少參數值。基於此,在使用該參數的圖層中,應用該功能對其進行修改。這與修改原型文件相同。
爲了獲得特定圖層的迭代次數,我只是在這裏放置另一個解決方案。與修改原型文件相比,它非常簡單,可能會顯着減少您的工作量。希望你能從這個解決方案中獲得靈感,並將其應用於你的案例。
感謝您的回答。我已經通過目錄另外解決了動態改變.prototxt文件的問題,我認爲你的解決方案會更加靈活。 – zbqv