簡體   English   中英

在訓練時期多次調用 Keras 回調

[英]Call Keras callback during training epoch more than once

我使用 Tensorflow Keras 來訓練神經網絡。 目前我使用以下回調來降低訓練過程中的學習率:

def learning_rate_scheduler(lr, epoch):
    return lr * tf.math.exp(-0.1)

我使用回調如下:

callback = tf.keras.callbacks.LearningRateScheduler(learning_rate_scheduler)
model.fit(x_train, y_train, epochs=10, callbacks=[callback], verbose=2)

這按預期工作。 然而,使用這種方法,每個 epoch 只會降低一次學習率。 我想知道如何修改此回調,以便每個時期調用n次,而不僅僅是一次? 那可能嗎?

為此,您需要創建一個自定義回調,以便您可以訪問與批處理相關的方法。 當您從tf.keras.callbacks.Callback繼承時,您可以覆蓋on_train_batch_end並設置每個批次的學習率。 如果您想每N步執行一次,那么您只需添加一個counter屬性並在每次調用on_train_batch_end時遞增它。 然后,僅在self.counter % N == 0時設置學習率。 一些樣板代碼可能看起來像這樣。

class LearningRateSchedule(tf.keras.callbacks.Callback):
    def __init__(self, N):
        super(LearningRateShedule, self).__init__()
        self.N = N
    
    def on_train_begin(self, logs=None):
        self.step = 0

    def on_train_batch_end(self, batch, logs=None):
        self.step += 1
        lr = self.get_lr()
        if self.step % self.N == 0:
            # Set learning rate for model
            tf.keras.backend.set_value(self.model.optimizer.lr, lr)

    def get_lr(self):
        # Function to get learning rate
        return lr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM