### 属性错误:Sequential 对象没有属性 ‘_ckpt_saved_epoch’ Keras CNN

我正在尝试使用 Keras(TensorFlow 后端,版本 1.14.0)运行一个相对简单的 CNN。以下是提供上下文的代码。

from keras.layers import Dense, Conv2D, MaxPooling2D, BatchNormalization, GlobalAveragePooling2Dfrom tensorflow.python.keras.callbacks import EarlyStopping, ModelCheckpointfrom keras import modelsfrom keras.applications.vgg16 import preprocess_inputfrom keras.preprocessing.image import ImageDataGeneratorimport matplotlib.pyplot as pltfrom keras.models import load_modelimport numpy as np# 起始点my_model = models.Sequential()# 添加第一个卷积块my_model.add(Conv2D(16, (3, 3), activation='relu', padding='same',                    input_shape=(224, 224, 3)))my_model.add(MaxPooling2D((2, 2), padding='same'))# 第二个块my_model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))my_model.add(MaxPooling2D((2, 2), padding='same'))# 第三个块my_model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))my_model.add(MaxPooling2D((2, 2), padding='same'))# 第四个块my_model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))my_model.add(MaxPooling2D((2, 2), padding='same'))# 全局平均池化my_model.add(GlobalAveragePooling2D())# 全连接层my_model.add(Dense(64, activation='relu'))my_model.add(BatchNormalization())# 进行预测my_model.add(Dense(2, activation='sigmoid'))# 显示模型摘要。检查可训练参数的数量my_model.summary()# 使用早期停止来通过回调最佳地终止训练es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=5)# 自动保存最佳模型mc = ModelCheckpoint("C:/Users/ab123/Desktop/vgg16_1.h5", monitor='val_acc', verbose=1, save_best_only=True,                             save_weights_only=False, mode='auto', period=1)cb_list = [mc, es]# 编译模型my_model.compile(optimizer='adam', loss='binary_crossentropy',                 metrics=['accuracy'])# 设置数据生成器data_generator = ImageDataGenerator(preprocessing_function=preprocess_input)# 从目录获取训练图像批次train_generator = data_generator.flow_from_directory(        'D:/Project2020/Step2a/train',        target_size=(224, 224),        batch_size=10,        class_mode='categorical')# 从目录获取验证图像批次validation_generator = data_generator.flow_from_directory(        'D:/Project2020/Step2a/val',        target_size=(224, 224),        batch_size=10,        class_mode='categorical')history = my_model.fit_generator(        train_generator,        epochs=1,        steps_per_epoch=2000,        validation_data=validation_generator,        validation_steps=1000, callbacks=cb_list)plt.plot(history.history['acc'])plt.plot(history.history['val_acc'])plt.ylim([.5,1.1])plt.ylabel('Accuracy')plt.xlabel('Epoch')plt.legend(['Train', 'Validation'], loc='upper left')plt.savefig("C:/Users/ab123/Desktop/11-16-19model.png", dpi=300)# 加载保存的模型import ossaved_model = load_model('C:/Users/ab123/Desktop/11-16-19model.h5')# 为测试图像集生成数据test_generator = data_generator.flow_from_directory(        'C:/Users/aeshon/Downloads/birds',        target_size=(224, 224),        batch_size=1,        class_mode='categorical',        shuffle=False)# 获取最后一个全连接层的预测激活值test_generator.reset()pred = saved_model.predict_generator(test_generator, verbose=1, steps=100)# 确定每个样本的最大激活值predicted_class_indices=np.argmax(pred,axis=1)# 为每个预测值标记正确性别labels = (test_generator.class_indices)labels = dict((v,k) for k,v in labels.items())predictions = [labels[k] for k in predicted_class_indices]# 将文件名格式化为简单的男性或女性filenames=test_generator.filenamesfilenz=[0]for i in range(0,len(filenames)):    filenz.append(filenames[i].split('\\')[0])filenz=filenz[1:]# 确定测试集的准确性match=[]for i in range(0,len(filenames)):    match.append(filenz[i]==predictions[i])match.count(True)/100

模型在早期停止功能触发或训练完成之前运行得很好。在那之后,它会抛出这个错误(带有回溯)。

Traceback (most recent call last):  File "D:/Invasive Species Detector/11-16-19 model.py", line 77, in <module>    validation_steps=1000, callbacks=cb_list)  File "C:\ProgramData\Anaconda3\envs\tensorflow_test\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper    return func(*args, **kwargs)  File "C:\ProgramData\Anaconda3\envs\tensorflow_test\lib\site-packages\keras\engine\training.py", line 1418, in fit_generator    initial_epoch=initial_epoch)  File "C:\ProgramData\Anaconda3\envs\tensorflow_test\lib\site-packages\keras\engine\training_generator.py", line 264, in fit_generator    callbacks.on_train_end()  File "C:\ProgramData\Anaconda3\envs\tensorflow_test\lib\site-packages\keras\callbacks.py", line 142, in on_train_end    callback.on_train_end(logs)  File "C:\ProgramData\Anaconda3\envs\tensorflow_test\lib\site-packages\tensorflow\python\keras\callbacks.py", line 940, in on_train_end    if self.model._ckpt_saved_epoch is not None:AttributeError: 'Sequential' object has no attribute '_ckpt_saved_epoch'

自然地,我首先查看是否有人之前遇到过相同的错误。除了一个使用 KerasTPU 对象的人之外,没有人遇到过,但在 Stack Overflow 上没有人回答他的问题,所以我不知道如何解决这个问题。我希望有人能对这个问题提供一些见解,请在评论中问我任何其他信息,如版本等。


回答:

在你的导入中,你混合了 kerastf.keras 包的导入,这是不支持的,会产生像你遇到的那样的奇怪错误。解决方案很简单,选择一个包并从中进行所有相关导入。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注