2017-01-08 7 views
0

Tensorflowでは、私は2つの画像クラス問題の大きなモデルを書いています。私の質問は、次のコードスニペットに関係している:なぜシャフリングデータが非常に高い精度を与えるのですか?

X, y, X_val, y_val = prepare_data() 
probs = calc_probs(model, session, X) 
accuracy = float(np.equal(np.argmax(probs, 1), np.argmax(y, 1)).sum())/probs.shape[0] 
loss = log_loss(y, probs) 

X形状のnp.arrayである:(25000,244,244,3)。そのコードは、精度= 0.5834(ランダム精度に対して)および損失= 2.7106になります。しかし 、私は最初の行の後にこれらの3行を追加することで、データをシャッフルするとき:

sample_idx = random.sample(range(0, X.shape[0]), 25000) 
X = X[sample_idx] 
y = y[sample_idx] 

は、結果が便利になる:精度= 0.9933、損失= 0.0208。 シャフリングデータの精度が大幅に向上するのはなぜですか?それは何ができるのでしょうか?

probs = session.run(model.probs, feed_dict={model.X: X}) 

更新:

機能calc_probsは、主に、実行コールで デバッグの時間後、私は、単一の画像を評価することは異なる結果が得られることを考え出しました。次のコード行を複数回実行する場合たとえば、あなたは毎回異なる結果が得られます。私のデータが正常にソートされ

session.run(model.props, feed_dict={model.X: [X[20]]) 

、Xは、クラス1つのサンプル最初に、クラス2とcalc_probs機能でが含まれています私は、データの各バッチを順番に使用して実行します。したがって、シャッフルせずに、各ランは1つのクラスのデータを持ちます。 シャッフルでは、バッチサイズが非常に小さい場合、ランダム精度が得られることにも気付きました。

答えて

0

ランダム化されたKaczmarzアルゴリズムの文脈では、これについていくつかの正当な理由があります。通常のKaczmarzアルゴリズムは、最小自乗問題でシャッフルしないSGDと見なすことができる古いアルゴリズムであり、ランダム化を使用するとより速い収束速度が保証されます。http://www.cs.ubc.ca/~nickhar/W15/Lecture21Notes.pdf

+0

ありがとう、私はこれを知っています私はあなたに同意します。しかし私のモデルはすでに訓練されていますが、シャッフルされていないデータとシャッフルされていないデータを使って評価しています。申し訳ありませんが、質問から明らかでない場合。 –

+0

Hm、あなたの前方の小道具は毎回異なる結果を出しますか?あなたのネットワークはどのようなものを使っていますか? –

+0

私はInceptionV3を使用します。 –

関連する問題