图层下降和更新咖啡模型
Layer drop and update caffe model
我需要从现有的caffe模型中更新caffe模型,我将删除最后两层。需要减少caffe模型的大小,这样部署起来更容易,尺寸更小。假设我现有的咖啡模型是A1。caffemodel,其中有5个卷积层和3个全连通层。我想从它生成一个名为B1的新模型。caffemodel将有5个卷积层和1个完全连接层(最后2个fc层被丢弃)。
我感谢你所有有价值的建议和有用的代码片段。完全连接的层确实很笨重。请参阅Girshick, RFast-RCNN ICCV 2015中的"3.1截断SVD以更快地检测"一节,该节描述了如何使用SVD技巧显着减少全连接层的负担。因此,您可以将三个完全连接的层替换为6个非常薄的层。
从模型A
到B
的步骤:
-
创建
B.prototxt
,具有与A
相同的"name"
s的5个卷积层。 -
给
B
中的单完全连接层一个A
中不存在的新"name"
-
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
的权重对于所有卷积层和随机对于新的单一完全连接层。 -
从
'/path/to/weights_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");
相关文章:
- QTableView:endMoveRows在模型中重置水平页眉大小
- 将IBM Rhapsody模型集成到VS 2019中
- 旋转模型矩阵时的形状失真
- 成员函数调用和C++对象模型
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 打印 ONNXRUNTIME::图形没有模型
- C++内存模型和位字段的最大序列
- 使用SIR模型的疾病爆发模拟
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 如何在 ECS 模型中组织实体?
- 在官方张量流 resnet50 模型上运行 tflite 精度工具
- Libtorch:如何加载ONNX模型?
- 使用 assimp 加载模型 - 不需要提升?
- 如何将经过训练的机器学习模型保存在python中并将其加载到C++中进行预测?
- C++内存模型中的确切规则阻止在获取操作之前重新排序
- 如何更改古罗比C++模型中的目标值系数
- 如何在 openGL 中围绕全局轴旋转模型?
- 无法使用 OpenCV 读取网络从咖啡加载数字训练的 Caffe 模型
- Caffe C++保存网络咖啡模型文件
- 图层下降和更新咖啡模型