2017-09-19 9 views
5

ich keras bin mit tensorboard und individuelle Lernrate über keras.callbacks.LearningRateSchedulerWie Lernrate Wert zu schaffen, in keras

Wie kann ich pass Lernrate in der Lage sein zu überwachen es in tensorboard implementieren möchten? (keras.callbacks.TensorBoard)

Zur Zeit habe ich:

lrate = LearningRateScheduler(lambda epoch: initial_lr * 0.95 ** epoch) 

tensorboard = TensorBoard(log_dir=LOGDIR, histogram_freq=1, 
          batch_size=batch_size, embeddings_freq=1, 
          embeddings_layer_names=embedding_layer_names) 

model.fit_generator(train_generator, steps_per_epoch=n_steps, 
        epochs=n_epochs, 
        validation_data=(val_x, val_y), 
        callbacks=[lrate, tensorboard]) 
+0

Ich habe die gleiche Frage – jundl77

+0

Für jeden mit der gleichen Frage, (obwohl in einem anderen Kontext) [diese Antwort] (https://stackoverflow.com/a/48206009/1531463) bietet eine mögliche Lösung. –

Antwort

1

Ich bin nicht sicher, wie es zu Tensorboard passieren, aber man kann es aus Python überwachen.

from keras.callbacks import Callback 
class LossHistory(Callback): 
    def on_train_begin(self, logs={}): 
     self.losses = [] 
     self.lr = [] 

    def on_epoch_end(self, batch, logs={}): 
     self.losses.append(logs.get('loss')) 
     self.lr.append(initial_lr * 0.95 ** len(self.losses)) 

loss_hist = LossHistory() 

Dann fügen Sie einfach loss_hist zu Ihrem callbacks.

Update:

Basierend auf this Antwort:

class LRTensorBoard(TensorBoard): 

    def __init__(self, log_dir='./logs', **kwargs): 
     super(LRTensorBoard, self).__init__(log_dir, **kwargs) 

     self.lr_log_dir = log_dir 

    def set_model(self, model): 
     self.lr_writer = tf.summary.FileWriter(self.lr_log_dir) 
     super(LRTensorBoard, self).set_model(model) 

    def on_epoch_end(self, epoch, logs=None): 
     lr = initial_lr * 0.95 ** epoch 

     summary = tf.Summary(value=[tf.Summary.Value(tag='lr', 
                simple_value=lr)]) 
     self.lr_writer.add_summary(summary, epoch) 
     self.lr_writer.flush() 

     super(LRTensorBoard, self).on_epoch_end(epoch, logs) 

    def on_train_end(self, logs=None): 
     super(LRTensorBoard, self).on_train_end(logs) 
     self.lr_writer.close() 

es einfach verwenden wie bei der normalen TensorBoard.

Verwandte Themen