トレーニングデータのクロスバリデーションでは、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)
あなたは、バッチ・ファイルのタグを読めば、あなたはそれがファイルなどのコピーについてですがわかりますWindowsの場合 –
@Noodles、あなたのコメントはどのように質問に関連していますか? –
あなたの質問を編集し、バッチファイルタグを削除しました。 WINDOWSのシェルスクリプト言語です。ニューラルネットワークとは関係ありません。 –