如何使用 Python 从 caffe 中的 .prototxt 按名称删除图层
How to remove layers by name from .prototxt in caffe using Python
我有一个使用 Python 代码创建的 train.prototxt
,我想删除 loss
层以自动创建 deploy.prototxt
。但是,我只知道通过整数删除图层的方法,如下所示:
net_param = deploy_net.to_proto()
del net_param.layer[0]
是否可以通过名称删除图层? Python API 的文档在哪里?我真的找不到它。我是否只需要查看 C++ 代码并尝试将其转换为 Python 代码?
编辑
我正在初始化网络。
net = caffe.NetSpec()
net.layer_dict
是所有层的字典。所以要删除你可以这样做:
del net.layer_dict['layer_name'];
您可以查看 pycaffe.py
了解 Python Api 的详细信息。
作为 答案的替代方法,您还可以执行以下操作来添加 force_backward=true
并从 deploy.prototxt
文件中删除任何图层,而无需修改原始文件:
from caffe.proto import caffe_pb2
from google.protobuf import text_format
model = caffe.io.caffe_pb2.NetParameter()
text_format.Merge(open(model_path + 'deploy.prototxt').read(), model)
model.force_backward = True
model.layer.remove(model.layer[-1]) # remove the last layer 'prob' for example
open(model_path + 'tmp.prototxt', 'w').write(str(model))
net = caffe.Net(model_path + 'tmp.prototxt', model_path + 'model.caffemodel', caffe.TEST)
我有一个使用 Python 代码创建的 train.prototxt
,我想删除 loss
层以自动创建 deploy.prototxt
。但是,我只知道通过整数删除图层的方法,如下所示:
net_param = deploy_net.to_proto()
del net_param.layer[0]
是否可以通过名称删除图层? Python API 的文档在哪里?我真的找不到它。我是否只需要查看 C++ 代码并尝试将其转换为 Python 代码?
编辑
我正在初始化网络。
net = caffe.NetSpec()
net.layer_dict
是所有层的字典。所以要删除你可以这样做:
del net.layer_dict['layer_name'];
您可以查看 pycaffe.py
了解 Python Api 的详细信息。
作为 force_backward=true
并从 deploy.prototxt
文件中删除任何图层,而无需修改原始文件:
from caffe.proto import caffe_pb2
from google.protobuf import text_format
model = caffe.io.caffe_pb2.NetParameter()
text_format.Merge(open(model_path + 'deploy.prototxt').read(), model)
model.force_backward = True
model.layer.remove(model.layer[-1]) # remove the last layer 'prob' for example
open(model_path + 'tmp.prototxt', 'w').write(str(model))
net = caffe.Net(model_path + 'tmp.prototxt', model_path + 'model.caffemodel', caffe.TEST)