2016-10-18 8 views
0

トレーニングデータのクロスバリデーションでは、batchnormを使用するとパフォーマンスが大幅に向上します。しかし、(トレーニングセット全体を再トレーニングした後で)バットンの層が存在すると、モデルの一般化がホールドアウトセットに完全に破壊されます。これはちょっと驚くべきことですが、私はテストの予測を間違って実装しているのだろうかと思います。keras batchnormはひどいテストパフォーマンスを持っています

存在するバットーン層を除いた一般化は問題ありません(私のプロジェクトの目的には十分ではありませんが、単純なネットでは合理的です)。

私のデータを共有することはできませんが、明白な実装エラーが誰にも見えますか?テストモードに設定する必要があるフラグはありますか?私はドキュメントで答えを見つけることができず、ドロップアウト(異なる列車/テスト動作を持つべきである)が期待通りに機能するはずです。ありがとう!

コード:

from keras.callbacks import EarlyStopping 
early_stopping = EarlyStopping(monitor='val_loss', patience=10) 
from keras.callbacks import ModelCheckpoint 
filepath="L1_batch1_weights.best.hdf5" 
checkpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_best_only=True, mode='auto') 

init = 'he_normal' 

act = 'relu' 

neurons1 = 80 

dropout_rate = 0.5 

model = Sequential() 
model.add(Dropout(0.2, input_shape=(5000,))) 
model.add(Dense(neurons1)) 
model.add(BatchNormalization()) 
model.add(Activation(act)) 
model.add(Dropout(dropout_rate)) 
model.add(Dense(1, activation='sigmoid')) 

model.compile(loss='binary_crossentropy', optimizer="adam", metrics=["accuracy"]) 


my_model = model.fit(X_train, y_train, batch_size=128, nb_epoch=150, validation_data =(X_test, y_test),callbacks=[early_stopping, checkpoint]) 

model.load_weights("L1_batch1_weights.best.hdf5") 

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 
print("Created model and loaded weights from file") 

probs = model.predict_proba(X_test,batch_size=2925) 
fpr, tpr, thresholds = roc_curve(y_test, probs) 
+0

あなたは、バッチ・ファイルのタグを読めば、あなたはそれがファイルなどのコピーについてですがわかりますWindowsの場合 –

+0

@Noodles、あなたのコメントはどのように質問に関連していますか? –

+0

あなたの質問を編集し、バッチファイルタグを削除しました。 WINDOWSのシェルスクリプト言語です。ニューラルネットワークとは関係ありません。 –

答えて

1

docsから:「トレーニング中、我々はデータを正規化するごとのバッチ統計を使用し、テスト中に、我々はトレーニング段階中に計算平均を実行している使用」

私の場合、トレーニングバッチサイズは128でした。テスト時には、手動でバッチサイズを完全なテストセット(2925)のサイズに設定しました。

1つのバッチサイズに使用される統計は、明らかに異なるバッチサイズには関連しないことは明らかです。

試験バッチサイズをトレインバッチサイズ(128)に変更すると、より安定した結果が得られました。結果を観察するために予測バッチサイズで試しました。予測結果は、バッチサイズの+/- 3倍のバッチサイズで安定していました。

load_weightsで使用する場合batchnormを使用して一緒にテストバッチサイズの影響のいくつかの議論はここでは)(あり: https://github.com/fchollet/keras/issues/3423

関連する問題