2017-12-12 10 views
1

これは適切な場所でない場合、些細な質問で申し訳ありませんが、より良い情報源を教えてください。Keras、検証データのメトリックスを印刷

kerasメトリックをvalidation_dataにのみ印刷する方法はありますか?

いくつかのエポック固有の指標(精度、リコール、f1スコアなど)をトラッキングしたいと考えています。ケラスのヒストリーで利用できる便利なメソッドがいくつかありますが、テスト/検証時には、トレーニング時にバッチ単位で計算すると意味がありません。

訓練の指標は、私のログを乱すだけです。それらをミュートする方法はありますか?

EDIT:私はCallbackをサブクラス化でき、エポックエンドでのみ行うことができますが、エポックごとに検証データを2回、コールバックで1回、ケーラで検証を計算する2回の予測を行っています損失。

答えて

1

ProgbarLoggerverbose > 0の場合にのみコールバックがモデルに追加されます。ソースコードtraining.pyで:

if verbose: 
    if steps_per_epoch is not None: 
     count_mode = 'steps' 
    else: 
     count_mode = 'samples' 
    callbacks += [cbks.ProgbarLogger(count_mode)] 

だから、可能な回避策は次のとおりです。

  • ビルトインProgbarLogger
  • サブクラスProgbarLoggerを抑制し、無視するようにコードを変更することがfit()verbose=0を指定しますトレーニングメトリクス
  • を呼び出すときにこのコールバックを追加する例えば210

from keras.callbacks import ProgbarLogger 

class ValOnlyProgbarLogger(ProgbarLogger): 
    def __init__(self, verbose, count_mode='samples'): 
     # Ignore the `verbose` argument specified in `fit()` and pass `count_mode` upstream 
     self.verbose = verbose 
     super(ValOnlyProgbarLogger, self).__init__(count_mode) 

    def on_train_begin(self, logs=None): 
     # filter out the training metrics 
     self.params['metrics'] = [m for m in self.params['metrics'] if m.startswith('val_')] 
     self.epochs = self.params['epochs'] 

input_tensor = Input(shape=(256,)) 
out = Dense(10)(input_tensor) 
model = Model(input_tensor, out) 
model.compile(loss='mse', optimizer='adam', metrics=['mae', 'cosine']) 
model.fit(X, Y, validation_data=(XX, YY), verbose=0, 
      callbacks=[ValOnlyProgbarLogger(verbose=1)]) 

訓練指標は現在、抑制されます。

Epoch 1/1 
1000/1000 [==============================] - 0s 392us/step - val_loss: 0.2479 - val_mean_absolute_error: 0.3988 - val_cosine_proximity: -0.7022 

(注)fit_generator代わりのfitを使用している場合、ユーザーが指定する必要がありますことをValOnlyProgbarLoggerを初期化するときはcount_mode='steps'です。

+0

ありがとうございます、それはかなりうまくいくでしょう。トレーニングメトリックの計算をまったくスキップできれば素晴らしいですが、検証時にのみもっと複雑な作業を行い、トレーニングを遅くすることはできません。私は、訓練時に特別なメトリック計算のコストにエポックエンドの余分な予測のコストを比重しなければならないと思う。 – filippo