keras 回调列表生成错误:“元组”对象没有属性“set_model”

我正在编写一个 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 回调列表中调用?


慕莱坞森
浏览 164回答 2
2回答

犯罪嫌疑人X

解包你的元组——在这种情况下,它很简单:(object,)[0] == object——但一般来说,你可能有(object1, object2),等等,你可以通过callbacks=[*es, *tb, *mc].解* 包迭代- 作为演示:def print_unpacked(*positional_args):&nbsp; &nbsp; print(positional_args)&nbsp; &nbsp; print(*positional_args)a = 1b = ('dog',5)print_unpacked(a,b)# >> (1, ('dog',5))# >> 1 ('dog',5)print(a,b)# >> 1 ('dog',5)print(a,*b)# >> 1 'dog' 5

肥皂起泡泡

您应该删除上面发布的代码中以下行末尾的逗号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),
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python