如何从train.prototxt创建caffe.deploy

Caa*_*los 8 machine-learning neural-network deep-learning caffe conv-neural-network

这是我的train.prototxt.这是我的deploy.prototxt.

当我想加载我的部署文件时,我收到此错误:

File "./python/caffe/classifier.py", line 29, in __init__  
in_ = self.inputs[0]  
IndexError: list index out of range  
Run Code Online (Sandbox Code Playgroud)

所以,我删除了数据层:

F1117 23:16:09.485153 21910 insert_splits.cpp:35] Unknown bottom blob 'data' (layer 'conv1', bottom index 0)
*** Check failure stack trace: ***
Run Code Online (Sandbox Code Playgroud)

比,我bottom: "data"从conv1层删除.

之后,我收到了这个错误:

F1117 23:17:15.363919 21935 insert_splits.cpp:35] Unknown bottom blob 'label' (layer 'loss', bottom index 1)
*** Check failure stack trace: ***
Run Code Online (Sandbox Code Playgroud)

bottom: "label"从损失层中删除了.我收到了这个错误:

I1117 23:19:11.171021 21962 layer_factory.hpp:76] Creating layer conv1
I1117 23:19:11.171036 21962 net.cpp:110] Creating Layer conv1
I1117 23:19:11.171041 21962 net.cpp:433] conv1 -> conv1
F1117 23:19:11.171061 21962 layer.hpp:379] Check failed: MinBottomBlobs() <= bottom.size() (1 vs. 0) Convolution Layer takes at least 1 bottom blob(s) as input.
*** Check failure stack trace: ***
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决它并创建我的部署文件?

Sha*_*hai 17

"火车"原型和"部署"原型之间有两个主要区别:

1.输入:虽然训练数据固定在预处理的训练数据集(lmdb/HDF5等)上,但部署网需要它以更"随机"的方式处理其他输入.
因此,第一个更改是删除输入图层(在TRAIN和TEST阶段推送"数据"和"标签"的图层).要替换输入图层,您需要添加以下声明:

input: "data"
input_shape: { dim:1 dim:3 dim:224 dim:224 }
Run Code Online (Sandbox Code Playgroud)

该声明不提供网络的实际数据,但它告诉网络预期的形状,允许caffe预先分配必要的资源.

2.损失:训练原型中最顶层定义了训练的损失函数.这通常涉及地面真相标签.部署网络时,您无法再访问这些标签.因此,损失层应转换为"预测"输出.例如,"SoftmaxWithLoss"层应转换为简单的"Softmax"层,该层输出类概率而不是对数似然丢失.其他一些损失层已经将预测作为输入,因此仅删除它们就足够了.

更新:有关详细信息,请参阅本教程.