如何从train.prototxt创建caffe.deploy

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

当我试图加载我的部署文件时,我得到了以下错误:

File "./python/caffe/classifier.py", line 29, in __init__  in_ = self.inputs[0]  IndexError: list index out of range  

因此,我删除了数据层:

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

然后,我从conv1层中删除了bottom: "data"

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

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

我从loss层中删除了bottom: "label"。然后我得到了这个错误:

I1117 23:19:11.171021 21962 layer_factory.hpp:76] Creating layer conv1I1117 23:19:11.171036 21962 net.cpp:110] Creating Layer conv1I1117 23:19:11.171041 21962 net.cpp:433] conv1 -> conv1F1117 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: ***

我应该做些什么来修复它并创建我的部署文件?


回答:

训练用的prototxt和部署用的prototxt之间有两个主要区别:

1. 输入:训练时数据固定为预处理的训练数据集(如lmdb/HDF5等),而部署网络时需要处理其他输入,方式更为“随机”。
因此,首先要做的改动是删除输入层(在训练和测试阶段推送“数据”和“标签”的层)。你需要添加以下声明来替换输入层:

input: "data"input_shape: { dim:1 dim:3 dim:224 dim:224 }

这个声明并不提供网络的实际数据,但它告诉网络期望的形状,使caffe能够预分配必要的资源。

2. 损失:训练用的prototxt中的最顶层定义了训练的损失函数。这通常涉及到真实标签。在部署网络时,你不再能访问这些标签。因此,损失层应转换为“预测”输出。例如,一个“SoftmaxWithLoss”层应转换为一个简单的“Softmax”层,输出类别概率而不是对数似然损失。其他一些损失层已经将预测作为输入,因此只需删除它们即可。

更新:请参阅这个教程以获取更多信息。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注