Python 动态修改图层';Caffe中的s参数
我使用下面的代码加载网络并进行设置,层的参数存储在Python 动态修改图层';Caffe中的s参数,python,caffe,pycaffe,Python,Caffe,Pycaffe,我使用下面的代码加载网络并进行设置,层的参数存储在deploy.prototxt中 net=caffe.net(deploy.prototxt、caffemodel、caffe.TEST) 但是,我想做的是动态地修改层的参数(例如内核大小,或pad,等等),而不是修改prototxt文件并重新加载它。 有什么方法可以做到这一点吗?您可以编写自己的get/set方法,并将它们公开给python。 在layer.hpp中: virtual float GetParameter(const std::
deploy.prototxt
中
net=caffe.net(deploy.prototxt、caffemodel、caffe.TEST)
但是,我想做的是动态地修改层的参数(例如内核大小
,或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添加这个函数,您可以编写自己的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添加这个选项,我建议您改变对这个问题的看法。您提到的“动态修改参数”依赖于什么?一个最常用的变量(我所面对的)是当前迭代次数。例如,我希望每10000次减少参数值。基于此,在使用该参数的图层中,应用该函数对其进行修改。这与修改prototxt文件相同
为了得到特定层中的迭代时间,我只在这里放置了另一个层的解决方案。它非常简单,与修改prototxt文件相比,可能会显著减少您的工作负载。希望您能从这个解决方案中得到启发,并将其应用到您的案例中
我建议你改变对这个问题的看法。您提到的“动态修改参数”依赖于什么?一个最常用的变量(我所面对的)是当前迭代次数。例如,我希望每10000次减少参数值。基于此,在使用该参数的图层中,应用该函数对其进行修改。这与修改prototxt文件相同
为了得到特定层中的迭代时间,我只在这里放置了另一个层的解决方案。它非常简单,与修改prototxt文件相比,可能会显著减少您的工作负载。希望您能从这个解决方案中得到启发,并将其应用到您的案例中
[文章末尾的解决方案]
我需要对模型进行微调,因此希望以编程方式更改各个层的lr_mult参数。我的帮助搜索从这个线程的标题开始,谢天谢地,在下面提到的标题为“如何以编程方式修改prototxt?”的链接中结束
以文本_格式加载google/protobuf中的模型定义prototxt文件后,可以访问和修改参数。修改后的protobuf可以写成文件
[文章末尾的解决方案]
我需要对模型进行微调,因此希望以编程方式更改各个层的lr_mult参数。我的帮助搜索从这个线程的标题开始,谢天谢地,在下面提到的标题为“如何以编程方式修改prototxt?”的链接中结束
以文本_格式加载google/protobuf中的模型定义prototxt文件后,可以访问和修改参数。修改后的protobuf可以写成文件 谢谢你的回答。我已经采取了另一种解决方案,通过目录动态更改.prototxt文件,我认为您的解决方案将更加灵活。谢谢您的回答。我已经采取了另一种解决方案,通过目录动态更改.prototxt文件,我认为您的解决方案将更加灵活。