2017-09-19 22 views
5

Tôi đang sử dụng keras và muốn thực hiện tỷ lệ học tùy chỉnh thông qua keras.callbacks.LearningRateSchedulerLàm thế nào để cung cấp học giá trị tỷ lệ để tensorboard trong keras

tỷ lệ thế nào tôi có thể đi vào học tập để có thể theo dõi nó trong tensorboard? (keras.callbacks.TensorBoard)

Hiện nay tôi có:

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

Tôi có cùng một câu hỏi – jundl77

+0

Đối với bất kỳ ai có cùng câu hỏi, (mặc dù trong một ngữ cảnh khác) [câu trả lời này] (https://stackoverflow.com/a/48206009/1531463) cung cấp giải pháp khả thi. –

Trả lời

1

Tôi không chắc chắn làm thế nào để vượt qua nó để Tensorboard, nhưng bạn có thể theo dõi nó từ python.

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

Sau đó chỉ cần thêm loss_hist vào callbacks.

Cập nhật:

Dựa trên this câu trả lời:

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

Chỉ cần sử dụng nó như bình thường TensorBoard.

Các vấn đề liên quan