keras tensorboard: tracer les scalars de validation et de train dans une même figure
donc j'utilise la planche de tension dans keras. Dans tensorflow, on pourrait utiliser deux rédacteurs de résumés différents pour les scalars de train et de validation afin que tensorboard puisse les tracer dans une même figure. Quelque chose comme le figure
TensorBoard - Parcelle de formation et de validation des pertes sur le même graphique?
y a-t-il un moyen de faire cela à keras?
Merci.
19
demandé sur
Fangzhou Zhai
2017-12-19 01:39:35
1 réponses
pour gérer les logs de validation avec un rédacteur séparé, vous pouvez écrire un callback personnalisé qui entoure l'original TensorBoard
méthodes.
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__
, deux sous-répertoires sont établis pour les journaux de formation et de validationset_model
écrivainself.val_writer
est créé pour les logs de validationon_epoch_end
, les journaux de validation sont séparés des journaux de formation et écrits en fichier avecself.val_writer
à l'Aide de le MNIST jeu de données comme un exemple:
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)])
vous pouvez alors visualiser les deux courbes sur une même figure dans TensorBoard.
31
répondu
Yu-Yang
2018-01-23 03:24:36