2017-09-24 7 views
0

私はテンソルフローバックエンドとJupyter-Notebookを使ってKerasで自分のモデルを訓練しています。 MNISTの例では、各バッチ後のトレーニングログの出力が更新されますが、別のデータセットの新しいモデルでは、各バッチに新しい値が出力されます。 verbose = 2を使用するのではなく、バッチごとに値が更新されるのを見たいと思います。Kerasの各バッチ後にトレーニングログの出力を更新するにはどうすればよいですか?

マイフィット関数は次のようになります。

model.fit(X, y_train, validation_split=0.33, epochs=1, batch_size=200, verbose=1) 

出力は次のようになります。

Train on 16415 samples, validate on 8085 samples 
    Epoch 1/1 
    16415/16415 [==============================] - 
ETA: 73s - loss: 9.0281 -acc: 0.44 - ETA: 49s - loss: 9.0271 - acc: 0.44 - 
ETA: 36s - loss: 8.7043 - acc: 0.46 - ETA: 33s - loss: 8.3979 - acc: 0.47 - 
ETA: 31s - loss: 8.3549 - acc: 0.48 - ETA: 29s - loss: 8.3011 - acc: 0.48 - 
ETA: 28s - loss: 8.1802 - acc: 0.49 - ETA: 27s - loss: 8.1220 - acc: 0.49 - 
ETA: 26s - loss: 8.0995 - acc: 0.49 - ETA: 26s - loss: 8.1178 - acc: 0.49 - 
ETA: 25s - loss: 8.1264 - acc: 0.49 - ETA: 24s - loss: 8.1274 - acc: 0.49 - 
ETA: 24s - loss: 8.0880 - acc: 0.49 - ETA: 23s - loss: 8.0860 - acc: 0.49 - 
ETA: 23s - loss: 8.0894 - acc: 0.49 - ETA: 22s - loss: 8.1303 - acc: 0.49 - 
... 

しかし、私はそうのような各バッチの後に更新一行だけを見たいのですが

Epoch 1/1 
     16415/16415 [==============================] - 
    ETA: 23s - loss: 9.0281 -acc: 0.44 - ETA: 22s - loss: 9.0271 - acc: 0.49 

ケラスのドキュメントでverbose = 2を設定する以外にオプションは見つかりませんが、これはトレーニング中にログを更新しません。

+0

私はコマンドラインからあなたのコードを実行した場合、私はどのようにあなたが出力を見ると思い、stdout' 'との問題を考えます期待するだろう。これは私にも気になるものです.... – DJK

+1

[Keras verbose training progress bar]の重複している可能性があります。各バッチの問題に新しい行を書きます。(https://stackoverflow.com/questions/41442276/keras-verbose-training-progressバー作成 - 新 - ライン毎 - バッチ - 発行) – DJK

答えて

0

LambdaCallbackを使用して、バッチとエポック間のカスタム関数を呼び出すことができます。

呼び出すための関数を渡すon_batch_endパラメータを使用します。

from keras.callbacks import LambdaCallback 

def batchOutput(batch, logs): 

    print("Finished batch: " + str(batch)) 
    print(logs) 

batchLogCallback = LambdaCallback(on_batch_end=batchOutput) 

model.fit(x,y,....,callbacks=[batchLogCallback]) 
関連する問題