2017-12-18 24 views
12

したがって、ケラス内でテンソルボードを使用しています。テンソルフローでは、列車と検証スカラーの2つの異なるサマリーライターを使用して、テンソルボードを同じ図形にプロットすることができます。TensorBoard - Plot training and validation losses on the same graph?ケラステンソルボード:プロットの列車と検証スカラーは同じ図形になります

図のようなものがkerasでこれを行う方法はありますか?

ありがとうございました。

答えて

8

個別のライターで検証ログを処理するには、元のTensorBoardメソッドをラップするカスタムコールバックを作成できます。

class TrainValTensorBoard(TensorBoard): 
    def __init__(self, log_dir='./logs', **kwargs): 
     # Make the original `TensorBoard` log to a subdirectory 'training' 
     training_log_dir = os.path.join(log_dir, 'training') 
     super(TrainValTensorBoard, self).__init__(training_log_dir, **kwargs) 

     # Log the validation metrics to a separate subdirectory 
     self.val_log_dir = os.path.join(log_dir, 'validation') 

    def set_model(self, model): 
     # Setup writer for validation metrics 
     self.val_writer = tf.summary.FileWriter(self.val_log_dir) 
     super(TrainValTensorBoard, self).set_model(model) 

    def on_epoch_end(self, epoch, logs=None): 
     # Pop the validation logs and handle them separately with 
     # `self.val_writer`. Also rename the keys so that they can 
     # be plotted on the same figure with the training metrics 
     logs = logs or {} 
     val_logs = {k.replace('val_', ''): v for k, v in logs.items() if k.startswith('val_')} 
     for name, value in val_logs.items(): 
      summary = tf.Summary() 
      summary_value = summary.value.add() 
      summary_value.simple_value = value.item() 
      summary_value.tag = name 
      self.val_writer.add_summary(summary, epoch) 
     self.val_writer.flush() 

     # Pass the remaining logs to `TensorBoard.on_epoch_end` 
     logs = {k: v for k, v in logs.items() if not k.startswith('val_')} 
     super(TrainValTensorBoard, self).on_epoch_end(epoch, logs) 

    def on_train_end(self, logs=None): 
     super(TrainValTensorBoard, self).on_train_end(logs) 
     self.val_writer.close() 
  • __init__では、2つのサブディレクトリがトレーニングと検証ログ
  • set_modelにするために設定されている、作家self.val_writer
  • on_epoch_endで検証ログのために作成され、検証ログが分離されていますトレーニングログからファイルに書き込むself.val_writer
一例として、MNISTデータセットを使用し

は:

from keras.datasets import mnist 
(x_train, y_train), (x_test, y_test) = mnist.load_data() 
x_train = x_train.reshape(60000, 784) 
x_test = x_test.reshape(10000, 784) 
x_train = x_train.astype('float32') 
x_test = x_test.astype('float32') 
x_train /= 255 
x_test /= 255 

model = Sequential() 
model.add(Dense(64, activation='relu', input_shape=(784,))) 
model.add(Dense(10, activation='softmax')) 
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 

model.fit(x_train, y_train, epochs=10, 
      validation_data=(x_test, y_test), 
      callbacks=[TrainValTensorBoard(write_graph=False)]) 

その後、TensorBoardで同じ数字上の2つの曲線を可視化することができます。

Screenshot

関連する問題