8

これは私の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: ***

より、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: ***

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: ***

それを修正して展開ファイルを作成するにはどうすればよいですか?

4

2 に答える 2

17

"train" prototxt と "deploy" prototxt には主に 2 つの違いがあります。

1. 入力:トレーニング データは前処理済みのトレーニング データセット (lmdb/HDF5 など) に固定されますが、ネットをデプロイするには、他の入力をより「ランダムな」方法で処理する必要があります。
したがって、最初の変更は、入力レイヤー (TRAIN および TEST フェーズ中に「データ」と「ラベル」をプッシュするレイヤー) を削除することです。入力レイヤーを置き換えるには、次の宣言を追加する必要があります。

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

この宣言はネットの実際のデータを提供しませんが、予想される形状をネットに伝え、caffe が必要なリソースを事前に割り当てることができるようにします。

2. 損失:トレーニング prototxt の最上位層は、トレーニングの損失関数を定義します。これには通常、グラウンド トゥルース ラベルが含まれます。ネットをデプロイすると、これらのラベルにアクセスできなくなります。したがって、損失レイヤーは「予測」出力に変換する必要があります。たとえば、「SoftmaxWithLoss」レイヤーは、対数尤度損失ではなくクラス確率を出力する単純な「Softmax」レイヤーに変換する必要があります。他のいくつかの損失レイヤーには、入力として既に予測があるため、それらを削除するだけで十分です。

更新: 詳細については、このチュートリアルを参照してください。

于 2015-11-18T06:25:42.267 に答える
0

@Shai からのアドバイスに加えて、ドロップアウト レイヤーを無効にすることもできます。

Caffe の作成者である Jia Yangqing は、ドロップアウト レイヤーがテスト結果に与える影響は無視できると述べていますが ( Google グループの会話、2014 年)、他のディープラーニング ツールはデプロイ フェーズでドロップアウトを無効にすることを提案しています (たとえば、lasange など)。

于 2016-07-28T07:22:13.690 に答える