【问题标题】:Keras AttributeError: 'Sequential' object has no attribute 'predict_classes'Keras AttributeError:“顺序”对象没有属性“predict_classes”
【发布时间】:2021-08-18 17:01:31
【问题描述】:

我正在尝试按照本指南 https://machinelearningmastery.com/how-to-calculate-precision-recall-f1-and-more-for-deep-learning-models/ 查找模型性能指标(F1 分数、准确度、召回率)

这个确切的代码几个月前还在工作,但现在返回各种错误,非常令人困惑,因为我没有更改此代码的一个字符。也许包更新改变了一些事情?

我使用 model.fit 拟合序列模型,然后使用 model.evaluate 来查找测试准确度。现在我正在尝试使用 model.predict_classes 进行类预测(模型是一个多类分类器)。代码如下:

model = Sequential()
model.add(Dense(24, input_dim=13, activation='relu'))
model.add(Dense(18, activation='relu'))
model.add(Dense(6, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

-

history = model.fit(X_train, y_train, batch_size = 256, epochs = 10, verbose = 2, validation_split = 0.2)

-

score, acc = model.evaluate(X_test, y_test,verbose=2, batch_size= 256)
print('test accuracy:', acc)

-

yhat_classes = model.predict_classes(X_test)
 

最后一行返回错误“AttributeError: 'Sequential' object has no attribute 'predict_classes'”

这个确切的代码不久前还在工作,所以有点挣扎,感谢您的帮助

【问题讨论】:

  • 你是在 colab 上运行这个吗?

标签: python keras


【解决方案1】:

此功能已在 TensorFlow 2.6 版中移除。 根据keras in rstudio reference

更新到

predict_x=model.predict(X_test) 
classes_x=np.argmax(predict_x,axis=1)

或使用 TensorFlow 2.5 或更高版本。

如果您使用的是 TensorFlow 2.5 版,您将收到以下警告:

tensorflow\python\keras\engine\sequential.py:455: UserWarning: model.predict_classes() 已弃用,将在 2021-01-01 之后删除。请改用:* np.argmax(model.predict(x), axis=-1),如果您的模型进行多类分类(例如,如果它使用 softmax 最后一层激活)。* (model.predict(x) > 0.5).astype("int32"),如果您的模型进行二元分类(例如,如果它使用 @ 987654327@最后一层激活)。

【讨论】:

    【解决方案2】:

    我遇到了同样的错误,我使用下面的代码,成功了

    替换:

    predictions = model.predict_classess(x_test)
    

    有了这个:

    predictions = (model.predict(x_test) > 0.5).astype("int32")
    

    python 包类型:Tensorflow 2.6.0

    这很好用

    【讨论】:

      【解决方案3】:

      我们可以用以下代码替换有问题的代码行:

      y_predict = np.argmax(model.predict(x_test), axis=-1)
      

      【讨论】:

        【解决方案4】:

        我使用以下代码进行预测

        y_pred = model.predict(X_test)
        y_pred = np.round(y_pred).astype(int)
        

        【讨论】:

        • 这对我不起作用。上一个答案是。
        【解决方案5】:

        Tensorflow 的最新版本,他们已经弃用了 predict_classes 函数(之前的版本中对此有警告)

        预测 = np.argmax(model.predict(x_test),axis=1)

        【讨论】:

        • 输入代码时使用代码块
        【解决方案6】:

        在Tensorflow 2.7 中可以使用以下代码获得预测类:

            predicted = np.argmax(model.predict(token_list),axis=1)
        

        【讨论】:

          【解决方案7】:

          使用这个,因为最新版本的 tensorflow 删除了 predict_classes

          predictions = (model.predict(X_test) > 0.5)*1 
          

          由于这是一个二元问题(0 或 1),因此输出类别取决于概率是否大于 0.5。因此上面的代码

          【讨论】:

            猜你喜欢
            • 2022-01-04
            • 2021-10-23
            • 1970-01-01
            • 2022-01-14
            • 1970-01-01
            • 2019-07-30
            • 2020-01-29
            • 2020-01-03
            相关资源
            最近更新 更多