Мой вопрос довольно простой, но я не могу найти однозначного ответа в Интернете (пока).
Я сохранил веса модели keras, обученной с помощью оптимизатора adam после определенного количества эпох обучения, используя:
callback = tf.keras.callbacks.ModelCheckpoint(filepath=path, save_weights_only=True)
model.fit(X,y,callbacks=[callback])
Когда я возобновлю обучение после закрытия своего jupyter, могу ли я просто использовать:
model.load_weights(path)
продолжить обучение.
Поскольку Адам зависит от номера эпохи (например, в случае снижения скорости обучения), я хотел бы знать самый простой способ возобновить тренировки в тех же условиях, что и раньше.
После ответа Ибарронда я написал небольшой пользовательский обратный вызов.
optim = tf.keras.optimizers.Adam()
model.compile(optimizer=optim, loss='categorical_crossentropy',metrics=['accuracy'])
weight_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path, save_weights_only=True, verbose=1, save_best_only=False)
class optim_callback(tf.keras.callbacks.Callback):
'''Custom callback to save optimiser state'''
def on_epoch_end(self,epoch,logs=None):
optim_state = tf.keras.optimizers.Adam.get_config(optim)
with open(optim_state_pkl,'wb') as f_out:
pickle.dump(optim_state,f_out)
model.fit(X,y,callbacks=[weight_callback,optim_callback()])
Когда я возобновлю тренировки:
model.load_weights(checkpoint_path)
with open(optim_state_pkl,'rb') as f_out:
optim_state = pickle.load(f_out)
tf.keras.optimizers.Adam.from_config(optim_state)
Я просто хочу проверить, правильно ли это. Еще раз большое спасибо !!
Приложение: При дальнейшем чтении реализации Keras Адама по умолчанию и исходный документ Адама, я считаю, что Адам по умолчанию не зависит от номера эпохи, а только от номер итерации. Следовательно, в этом нет необходимости. Однако код может быть полезен всем, кто хочет отслеживать работу других оптимизаторов.
Epoch
=iteration
*batch_size
, и посколькуbatch_size
(в большинстве случаев) константа, я предполагаю, что они оба одинаково важны. - person ibarrond   schedule 06.02.2020