Python 图层删除和更新caffe模型
我需要从现有的caffe模型中更新caffe模型,在该模型中我将删除最后两层。需要减小caffe模型的尺寸,以使其更易于部署,且尺寸更小。假设我现有的caffe模型是A1.caffemodel,它有5个卷积层和3个完全连接层。我想从中生成一个名为B1.caffemodel的新模型,该模型将有5个卷积层和1个完全连接层(最后2个fc层被丢弃)Python 图层删除和更新caffe模型,python,c++,caffe,Python,C++,Caffe,我需要从现有的caffe模型中更新caffe模型,在该模型中我将删除最后两层。需要减小caffe模型的尺寸,以使其更易于部署,且尺寸更小。假设我现有的caffe模型是A1.caffemodel,它有5个卷积层和3个完全连接层。我想从中生成一个名为B1.caffemodel的新模型,该模型将有5个卷积层和1个完全连接层(最后2个fc层被丢弃) 我感谢您所有有价值的建议和有用的代码片段 完全连接的层确实可能非常重。请参阅“3.1截断SVD以提高检测速度”一节,介绍如何使用技巧显著降低完全连接层的负担
我感谢您所有有价值的建议和有用的代码片段 完全连接的层确实可能非常重。请参阅“3.1截断SVD以提高检测速度”一节,介绍如何使用技巧显著降低完全连接层的负担。因此,您可以将三个完全连接的层替换为6个非常薄的层 从型号
A
到B
的步骤:
B.prototxt
,与A
具有相同的“名称”
sB
中的单个完全连接层提供一个新的名称,该名称在a
中不存在
import caffe
B = caffe.Net('/path/to/B.prototxt', '/path/to/weights_A.caffemodel', caffe.TEST)
B.save('/path/to/weights_B.caffemodel')
B
的权重与A
的权重相同,对于新的单个完全连接层,random的权重相同'/path/to/weights\u B.caffemodel'
开始微调模型B
,以了解新的单个完全连接层的权重C++实现:
Net<float> caffe_net("B.prototxt", caffe::TEST);
caffe_net.CopyTrainedLayersFrom("A.caffemodel");
caffe::NetParameter net_param;
caffe_net.ToProto(&net_param);
caffe::WriteProtoToBinaryFile(net_param, "B.caffemodel");
Net-caffe\u-Net(“B.prototxt”,caffe::TEST);
caffe_net.copyratedLayers from(“A.CAFFEFOModel”);
caffe::NetParameter net_param;
caffe_net.ToProto(&net_param);
caffe::WriteProtoToBinaryFile(net_参数,“B.caffemodel”);
想到这一点,您可以跳过步骤3和步骤4,使用-weights/path/to/weights\u A从命令行微调B
。caffemodel
:caffe将自动从weights\u A获取所有卷积层(它们具有相同的“名称”)的参数,并随机初始化新的完全连接层(因为它在<代码> WebStIA<代码>中找不到它的名字。C++的步骤3中的实现。