Keras 回调 AttributeError:“ModelCheckpoint”对象没有属性“_implements_train_batch_hooks”

Posted

技术标签:

【中文标题】Keras 回调 AttributeError:“ModelCheckpoint”对象没有属性“_implements_train_batch_hooks”【英文标题】:Keras callback AttributeError: 'ModelCheckpoint' object has no attribute '_implements_train_batch_hooks' 【发布时间】:2020-10-08 18:09:38 【问题描述】:

我正在使用 Keras(带有 TensorFlow 后端)来实现神经网络,并且只想保存在训练期间最大限度地减少验证集损失的模型。为此,我实例化了一个 ModelCheckpoint 并在调用模型的 fit 方法时传递它。但是,当我这样做时,我收到以下错误:“AttributeError: 'ModelCheckpoint' object has no attribute '_implements_train_batch_hooks'”。我在网上找到的最接近我的问题的是this post 有类似的错误,问题来自kerastf.keras 的混合模块,但这不是我的情况,因为我的所有模块都是从@987654325 导入的@。我一直在网上和 Keras 文档中寻找一段时间,但找不到任何可以解释这个错误的东西。以下是与问题最相关的代码部分:

导入模块

from keras.models import Sequential
from keras.layers import Embedding, Conv1D, Dense, Dropout, GlobalMaxPool1D, Concatenate
from keras.callbacks import ModelCheckpoint

ModelCheckpoint 实例化、模型编译和拟合方法调用:

checkpoint = ModelCheckpoint('../model_best.h5', monitor='val_loss', verbose=1, save_best_only=True, mode='min')

model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

history = model.fit(x_train, y_train, 
                    epochs = 10, batch_size = 64,
                    validation_data = (x_val, y_val),
                    callbacks = [checkpoint])

...这里是完整的 Traceback:

Traceback (most recent call last):

  File "/Users/thisuser/thisrepo/classifier.py", line 39, in <module>
    callbacks = [checkpoint])

  File "/Users/thisuser/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 66, in _method_wrapper
    return method(self, *args, **kwargs)

  File "/Users/thisuser/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 826, in fit
    steps=data_handler.inferred_steps)

  File "/Users/thisuser/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow/python/keras/callbacks.py", line 231, in __init__
    cb._implements_train_batch_hooks() for cb in self.callbacks)

  File "/Users/thisuser/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow/python/keras/callbacks.py", line 231, in <genexpr>
    cb._implements_train_batch_hooks() for cb in self.callbacks)

AttributeError: 'ModelCheckpoint' object has no attribute '_implements_train_batch_hooks'

我使用的版本是:

Python:3.7.7 Keras:2.3.0-tf

有谁知道可能导致问题的原因?如果需要,我可以稍微修改我的代码以在此处提供所有内容,以便它可以重现。提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

我最近也遇到了这个问题。

我发现了什么:最近 keras 或 tensorflow 版本是updated by developers,这导致了问题。

解决方案:由于keras的开发者要求大家切换到tf.keras版本,所以需要替换掉你的代码import section

发件人:

import keras

收件人:

import tensorflow.keras as keras

之后一切都对我有用。

【讨论】:

【参考方案2】:

替换: 从 keras.callbacks 导入 ModelCheckpoint 到: 从 tensorflow.keras.callbacks 导入模型检查点

【讨论】:

以上是关于Keras 回调 AttributeError:“ModelCheckpoint”对象没有属性“_implements_train_batch_hooks”的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:模块'keras'没有属性'initializers'

AttributeError:模块 'keras.utils' 没有属性 'Sequence'

如何修复 AttributeError:模块 'tensorflow' 没有属性 'keras'?

AttributeError:无法导入 keras 和分割模型

AttributeError:模块'tensorflow_core.python.keras.api._v2.keras.activations'没有属性'swish'

AttributeError:模块“tensorflow.keras.layers”没有属性“重新缩放”