Я пишу модель keras, в которой я хочу использовать несколько встроенных обратных вызовов keras, однако я, вероятно, совершаю грамматическую ошибку где-то, что не могу обнаружить.Часть кода, вызывающая у меня проблемы, выглядит следующим образом:
from keras.callbacks import EarlyStopping, ModelCheckpoint, TensorBoard
...
...
es = EarlyStopping(monitor='val_loss', min_delta=0.01, verbose=1, patience=5)
tb = TensorBoard(log_dir=logdir, write_graph=True, write_images=True, histogram_freq=0)
mc = ModelCheckpoint(filepath=filepath, save_best_only=True, monitor='val_loss', mode='min')
history = model.fit(X_train, y_train,
batch_size=batch_size,
epochs=n_epochs,
verbose=1,
validation_split=0.3,
callbacks=[es, tb, mc])
, однако при этом я получаю ошибку 'tuple' object has no attribute 'set_model'
.Ссылаясь на этот другой вопрос, кажется, что проблема вызвана тем фактом, что es, tb
уже являются кортежами на се и поэтому их размещение в списке (в вызове callbacks=[es, tb, mc]
) вызывает ошибку.На самом деле
print(type(es))
print(type(tb))
print(type(mc))
<class 'tuple'>
<class 'tuple'>
<class 'keras.callbacks.ModelCheckpoint'>
При этом сказано, я не понимаю, как обойти это.EarlyStopping
и TensorBoard
возвращают кортежи, как они должны вызываться в списке обратных вызовов keras?