首页 > 解决方案 > Keras LearningRateScheduler 在批次而不是时期回调

问题描述

我正在使用 Tensorflow 2.x,下面是我编写的自定义学习率调度程序

def scheduler(epoch):
  if epoch == 1:
    return 3e-5
  else:
    return 3e-5 * (1/(1 + 0.01 * epoch ))

我这样称呼它

callback = tf.keras.callbacks.LearningRateScheduler(scheduler)

model.fit(inputs_train,tags_train,epochs=30,batch_size=32,validation_data=(inputs_val,tags_val),shuffle=False,callbacks=[callback])

但是,我不想在时代调用它,而是想在每批中调用它。我在有关批次的文档下方找不到任何内容

https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/LearningRateScheduler

是否可以批量调用它,如果可以,该怎么做?

标签: python-3.xtensorflowkerasneural-networktf.keras

解决方案


编写自定义回调并使用后端set_value方法

from keras.models import Sequential
from keras.layers import Dense
import keras
import numpy as np
import tensorflow.keras.backend as K

model = Sequential()
model.add(Dense(8, input_dim=2, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

x = np.random.randn(10,2)
y = np.random.randint(0,2,(10,2))


class lr_callback(keras.callbacks.Callback):
    def on_batch_end(self, batch, logs=None):
        K.set_value(self.model.optimizer.lr, 0.54321)

model.fit(x,y,epochs=2,batch_size=4,shuffle=False, callbacks=[lr_callback()])
print (K.get_value(model.optimizer.lr))

推荐阅读