我正在編寫一個 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每個 sé 已經是元組的事實產生的,因此將它們定位到一個列表中(在 call 中callbacks=[es, tb, mc])會引發錯誤。實際上print(type(es))print(type(tb))print(type(mc))<class 'tuple'><class 'tuple'><class 'keras.callbacks.ModelCheckpoint'>這就是說,我不明白如何解決它。EarlyStopping并TensorBoard返回元組,它們應該如何在 keras 回調列表中調用?
2 回答

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
解包你的元組——在這種情況下,它很簡單:(object,)[0] == object——但一般來說,你可能有(object1, object2),等等,你可以通過callbacks=[*es, *tb, *mc].
解* 包迭代- 作為演示:
def print_unpacked(*positional_args):
print(positional_args)
print(*positional_args)
a = 1
b = ('dog',5)
print_unpacked(a,b)
# >> (1, ('dog',5))
# >> 1 ('dog',5)
print(a,b)
# >> 1 ('dog',5)
print(a,*b)
# >> 1 'dog' 5

肥皂起泡泡
TA貢獻1829條經驗 獲得超6個贊
您應該刪除上面發布的代碼中以下行末尾的逗號
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),
添加回答
舉報
0/150
提交
取消