AttributeError: Model object has no attribute predict_classes 的解决方案

第一次用的网络是在model=Sequential()下添加模块的的方法,也就是所谓的顺序模型。Sequential class可以使用model.predict_classes()的方法来实现预测;
代码如下:

model = Sequential()
model.add(Conv2D(6,kernel_size=(3,3),strides=1,activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2),strides=2)

model.add(Conv2D(16,kernel_size=(3,3),strides=1, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2),strides=2)

model.add(Flatten)
model.add(Dense(120,activation='relu'))
model.add(Dense(84,activation='relu'))
model.add(Dense(10,activation='sigmoid'))

第二次用的方法,是编写好网络结构后使用model=Model()综合起来的方法,也就是Model class,无法使用model.predict_classes(),但是可以使用组合形式预测。
代码如下:

import tensorflow as tf
import pandas as pd
import numpy as np
from tensorflow import keras
from tensorflow.keras import Sequential
from tensorflow.keras.layers import *
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score


(train_image,train_label),(test_image, test_label)=tf.keras.datasets.cifar10.load_data()
train_image = train_image/255
test_image = test_image/255

input = keras.Input(shape=(32,32,3))
x = keras.layers.Conv2D(6,kernel_size=(3,3),strides=1,activation='relu')(input)
x = keras.layers.MaxPooling2D(pool_size=(2,2),strides=2)(x)
x = keras.layers.Conv2D(16,kernel_size=(3,3),strides=1,activation='relu')(x)
x = keras.layers.MaxPooling2D(pool_size=(2,2),strides=2)(x)
x = keras.layers.Flatten()(x)
x = keras.layers.Dense(120,activation='relu')(x)
x = keras.layers.Dense(84,activation='relu')(x)
output = keras.layers.Dense(10,activation='sigmoid')(x)
model = keras.Model(inputs=input, outputs=output)

model.compile(optimizer= tf.keras.optimizers.Adam(learning_rate=0.0001),
              loss='categorical_crossentropy',
              metrics=['acc'])
train_label_onehot=tf.keras.utils.to_categorical(train_label)
history = model.fit(train_image, train_label_onehot,batch_size=256,epochs=20,validation_split=0.2)
y_predict = model.predict_image(test_image)

但是,此时会报错:

AttributeError: 'Model' object has no attribute 'predict_classes' 

上网查了查之后发现,原因很简单,两次训练时,网络结构不同。

所以修改方法就是将

y_predict = model.predict_image(test_image)

改为:

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

即可。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值