2016-12-18 8 views
0

BVLCリファレンスAlexNetファイルを使用して、作成したトレーニングセットに対してCNNをトレーニングしています。訓練の進捗状況を測定するために、訓練データに対する精度を近似するために大まかな方法​​を使用してきました。テストネット上の私のバッチサイズは256です。私は〜4500の画像を持っています。私はsolver.test_nets [0] .forward()を17回呼び出して、solver.test_nets [0] .blobs ['accuracy'] .data(その順方向パスの精度)の値を記録します。私はこれらを平均します。私の考えは、自分の検証セットから無作為に抽出された256のサンプルを17個取って、これらの無作為抽出の正確さを得ることでした。私はこれがセット全体に対する正確な正確さに近づくことを期待します。しかし、私は後で戻って、自分のLMDB内の各項目を調べるためのスクリプトを書いて、私がテストセット全体の混乱マトリクスを生成できるようにしました。モデルの真の正確さが推定された精度よりも大幅に低いことを発見しました。たとえば、〜75%の私の予想精度は〜50%真の精度に低下しました。これは私が予想していたよりもはるかに悪い結果です。Caffeはテストセットの精度をどのように決定しますか?

My assumptions match the answer given here.

私はどこか間違った仮定をしたことがありますか?違いを説明できるのは何ですか?私はforward()関数が無作為のサンプルを集めたと仮定していましたが、そうは確信していません。 blobs。['accuracy']。データは毎回異なる結果を返しましたが(通常は小さな範囲内ですが)、これが私がこれを仮定した理由です。

答えて

0

私は、forward()関数が無作為のサンプルを集めたと仮定していましたが、私はそれが本当であるとは確信していません。 blobs。['accuracy']。データは毎回異なる結果を返しましたが(通常は小さな範囲内ですが)、これが私がこれを仮定した理由です。カフェから

forward()関数は任意のランダムサンプリングを行っていない、それだけであなたのDataLayerに応じて次のバッチを取得します。たとえば、お客様のケースではforward()は、ネットワーク内の次の256個の画像を渡します。これを17回実行すると、画像が順次転送されます17x256=4352画像。

私は間違った前提をどこかにしましたか?違いを説明できるのは何ですか?

LMDB全体を処理するスクリプトが、トレーニング中と同じデータ前処理を実行していることを確認してください。

関連する問題