Machine learning 如何从train.prototxt创建caffe.deploy

Machine learning 如何从train.prototxt创建caffe.deploy,machine-learning,neural-network,deep-learning,conv-neural-network,caffe,Machine Learning,Neural Network,Deep Learning,Conv Neural Network,Caffe,这是我的。这是我的 当我想加载我的部署文件时,出现以下错误: 因此,我删除了数据层: 然后,我从conv1层中删除了底部:“data” 之后,我得到了这个错误: 我从损失层中删除了底部的“标签”。我得到了这个错误: I1117 23:19:11.171021 21962层\u工厂.hpp:76]创建层conv1 I1117 23:19:11.171036 21962 net.cpp:110]正在创建层conv1 I1117 23:19:11.171041 21962 net.cpp:433]co

这是我的。这是我的

当我想加载我的部署文件时,出现以下错误:

因此,我删除了数据层:

然后,我从conv1层中删除了
底部:“data”

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

我从损失层中删除了底部的“标签”。我得到了这个错误:

I1117 23:19:11.171021 21962层\u工厂.hpp:76]创建层conv1
I1117 23:19:11.171036 21962 net.cpp:110]正在创建层conv1
I1117 23:19:11.171041 21962 net.cpp:433]conv1->conv1

F1117 23:19:11.171061 21962层。hpp:379]检查失败:MinBottomBlobs()在“train”协议和“deploy”协议之间有两个主要区别:

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

input: "data"
input_shape: { dim:1 dim:3 dim:224 dim:224 }
该声明不提供网络的实际数据,但它告诉网络预期的形状,允许caffe预先分配必要的资源

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


更新:有关更多信息,请参阅。

除了@Shai的建议外,您可能还希望禁用退出层


尽管Caffe的作者贾扬清曾经说过,退出层对测试结果的影响可以忽略不计(),但其他深度学习工具建议在部署阶段禁用退出(例如),为了定义输入的
形状
“数据”
,我们使用proto消息。此
形状
具有一个“重复”参数
dim
,该参数定义了
形状
的一个维度
dim:1
意味着我们希望
的“数据”
在部署阶段一次只包含一个样本(即
批量大小:1
)。@Shai感谢您的明确解释。有没有类似的方法可以用python编程生成deploy.prototxt?关于我的问题的更多细节在这里——@ Shai,在测试过程中,考虑较大的代码> BoTCHYSIZE 会有什么不同?它对测试的准确性有影响吗?还是只用于训练过程?@FäridAlijani它对测试时间没有影响accuracy@Shai,所以我有
net.blob[net.inputs[0]]。重塑(批处理大小、高度、宽度)#n、C、H、W->1、C、H,W
我是否总是认为批处理大小=1
是最简单的W.r.t内存消耗和时间效率?这取决于您的退出层的实现方式。在某些情况下,您需要用缩放来替换掉电,以补偿未掉电信号能量的增加:例如,如果掉电50%,那么在测试时间内,通过该层的信号强度将增加2倍,您需要将输出缩小50%。正如您所知,你的火车和部署文件的链接都断了,你能替换它们吗?对不起,我没有这些文件了。
F1117 23:16:09.485153 21910 insert_splits.cpp:35] Unknown bottom blob 'data' (layer 'conv1', bottom index 0)
*** Check failure stack trace: ***
F1117 23:17:15.363919 21935 insert_splits.cpp:35] Unknown bottom blob 'label' (layer 'loss', bottom index 1)
*** Check failure stack trace: ***
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: ***
input: "data"
input_shape: { dim:1 dim:3 dim:224 dim:224 }