如何使用Python从caffe中的.prototxt中按名称删除图层

时间:2017-04-13 10:46:44

标签: deep-learning caffe

我使用Python代码进行train.prototxt创建,并希望删除loss图层以自动创建deploy.prototxt。但是,我只知道用这样的整数删除图层的方法:

net_param = deploy_net.to_proto()
del net_param.layer[0]

是否有可能按名称删除图层? Python API的文档在哪里?我真的找不到它。我只需要查看C ++代码并尝试将其转换为Python代码吗?

修改

我正在用。初始化网。

net = caffe.NetSpec()

2 个答案:

答案 0 :(得分:1)

net.layer_dict是所有图层的字典。所以要删除你可以这样做:

del net.layer_dict['layer_name'];

您可以查看pycaffe.py以获取Python Api的详细信息。

答案 1 :(得分:0)

作为this答案的替代方法,您还可以执行以下操作来添加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)