如何使用 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)