【问题标题】:Keras LearningRateScheduler callback on batches instead of epochsKeras LearningRateScheduler 在批次而不是时期回调
【发布时间】:2020-06-13 19:10:53
【问题描述】:

我使用的是 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])

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

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

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

【问题讨论】:

    标签: python-3.x tensorflow keras neural-network tf.keras


    【解决方案1】:

    编写自定义回调并使用后端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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 2021-04-07
      相关资源
      最近更新 更多