2017-09-19 35 views
5

मैं keras उपयोग कर रहा हूँ में tensorboard और keras.callbacks.LearningRateSchedulerकैसे सीख दर मूल्य प्रदान करने के keras

मैं कैसे सीखने पारित कर सकते हैं दर के माध्यम से कस्टम सीखने दर लागू करने के लिए tensorboard में यह निगरानी करने में सक्षम होना चाहता हूँ के लिए? (keras.callbacks.TensorBoard)

वर्तमान में मेरे पास है:

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

मेरे पास एक ही प्रश्न है – jundl77

+0

किसी भी प्रश्न के लिए, (हालांकि एक अलग संदर्भ के तहत) [यह उत्तर] (https://stackoverflow.com/a/48206009/1531463) एक संभावित समाधान प्रदान करता है। –

उत्तर

1

मुझे यकीन है कि कैसे Tensorboard करने के लिए इसे पारित करने के लिए नहीं कर रहा हूँ, लेकिन आप अजगर से निगरानी कर सकते हैं।

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() 

तो बस अपने callbacks करने के लिए loss_hist जोड़ें।

अद्यतन:

this जवाब के आधार पर:

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() 

बस सामान्य TensorBoard की तरह उपयोग।

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