2017-12-18 56 views
12

तो मैं keras भीतर tensorboard उपयोग कर रहा हूँ में मान्यता scalars। tensorflow में एक ट्रेन और सत्यापन scalars के लिए दो अलग-अलग summarywriters का उपयोग करें ताकि tensorboard उन्हें एक ही चित्र में साजिश कर सकता है हो सकता है।keras tensorboard: भूखंड ट्रेन और एक ही आंकड़ा

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__ में, दो उप निर्देशिकाओं प्रशिक्षण और मान्यता लॉग
  • 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 में एक ही आंकड़े पर दो घटता कल्पना कर सकते हैं।

Screenshot

संबंधित मुद्दे