Обратный вызов Keras LearningRateScheduler для периодов вместо эпох - PullRequest
0 голосов
/ 01 марта 2020

Я использую 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

Можно ли вызывать его партиями, если да, как это сделать?

1 Ответ

0 голосов
/ 01 марта 2020

Написать свой обратный вызов и использовать backend set_value method

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