list of keras callbacks generates error: 'tuple' object has no attribute 'set_model'
list of keras callbacks generates error: 'tuple' object has no attribute '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'
。参考 other question 似乎问题是由 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
return 元组,在 keras 回调列表中应该如何调用它们?
解压你的元组 - 在这种情况下,很简单:(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
您应该删除上面发布的代码中以下行末尾的逗号
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),
我正在编写一个 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
return 元组,在 keras 回调列表中应该如何调用它们?
解压你的元组 - 在这种情况下,很简单:(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
您应该删除上面发布的代码中以下行末尾的逗号
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),