[英]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.