2016-07-11 16 views
0

私は自分のデータ(10k画像、2クラス)を訓練するためにCaffe GoogleNetモデルを使用しました。私は〜80%の精度で400000回の反復でそれを停止します。私は、以下のコマンドを実行した場合Caffe GoogleNet classification.cppはランダムな出力を提供します

:(私はそれをn回実行した場合、すなわち、その後、私はn個の異なる結果を得る)たびにつながる - - 一見ランダム

./build/examples/cpp_classification/classification.bin 
    models/bvlc_googlenet/deploy.prototxt 
    models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel 
    data/ilsvrc12/imagenet_mean.binaryproto 
    data/ilsvrc12/synset_words.txt 
    1.png 

を、それは私に異なっを与えます。どうして?私の訓練は失敗しますか?それはまだ参照モデルからの古いデータを使用していますか?

+0

10kの画像は、ConvNetをゼロから訓練するのに本当にたくさんありません。別のモデルを微調整しようとしましたか? – jerpint

答えて

1

私はトレーニングに問題はないと思います。トレーニングデータがなかったとしても、毎回同じ(おそらく間違った)出力を出さなければなりません。ランダムな結果が得られた場合、重みが正しくロードされていないことを示します。

.prototxtに対して.caffemodelを読み込むと、caffeは、その名前がcaffemodelの名前と一致するprototxtのすべてのレイヤーの重みを読み込みます。他のレイヤーでは、ランダム初期化(prototxtの仕様に従ってガウスXavierなど)を行います。

今のところ、あなたが今使っているのと同じプロトタイプを使ってモデルが訓練されているかどうかを確認するのが一番良い方法です。

あなたはGoogleNetのprototxtとreference_caffenet caffemodelを使用しています。これは意図的ですか?

1

あなたが微調整されたモデルを展開するときは、次の2つの主なものをチェックする必要があります

  1. 入力:

    • 入力画像ではなく、RGBのBGRチャネル(例えばOpenCVの)を使用します
    • 平均ファイル:トレーニング時の平均ファイルと同じですか?
  2. Prototxt:モデルをfintuningとき

    • 、あなたは元prototxtにいくつかのレイヤの名前を変更します、とあなたは同じレイヤ名を使用するかどうかを確認する必要がありますか?

そしてfinetuningのために非常に有用であるいくつかの Fine-tune tricksCS231n_transfer_learningがあります。

関連する問題