Вот базовый c пример создания обратного вызова и сохранения модели во время обратного вызова на внешний list
. Это должен быть список (или тип, допускающий изменение с помощью метода). Базовый класс tf.keras.callbacks.Callback
расширяется дополнительным аргументом, списком, в методе класса обратного вызова __init___
. Этот пример показывает, что это работает. Когда обратный вызов вызывается на training_end
, он добавляет текущую модель в список.
import tensorflow as tf
from tensorflow.python.keras.models import Model
# define a custom callback
class MyCustomCallback(tf.keras.callbacks.Callback):
def __init__(self, external_list):
self.list_obj = external_list
def on_train_end(self, logs=None):
self.list_obj.append(self.model)
# test the idea works
model_save_list = []
my_callback = MyCustomCallback(model_save_list)
model1 = Model()
my_callback.set_model(model1)
my_callback.on_train_end()
print(model_save_list)
Запустите это, и вы увидите, что внутренняя модель добавляется к вашему объекту списка:
[<tensorflow.python.keras.engine.training.Model object at 0x10d230b50>]
Измените свое обучение, добавив новый обратный вызов к обратным вызовам, например:
model.fit(inp_train, out_train, epochs=n_epoch, batch_size=s_batch, validation_data=(inp_val, out_val), callbacks=[early_stop, my_callback], verbose=0)