最近在学习深度学习网络的时候,按照书上的代码来敲,但是发现一个问题,就是
AttributeError: 'Sequential' object has no attribute 'predict_classes'
这是因为版本问题,使用不了predict_classes函数,但是没关系,使用np.argmax函数可以轻松解决
原代码:
prediction = model.predict_classes(X_test)
def pre_results(i):
plot_image(X_test1[i])#显示测试集图像
print('Y_test1=',Y_test1[i])#显示测试集图像标签编号
print("pre_result = ",prediction[i])#显示预测结果
pre_results(0)
pre_results(2)
以mnist数据集,LeNet这个例子分析,第一行输入的是测试集图像(多张图像),那么经过predict_classes所得到的prediction是每个图像所对应的图像编号,而predict_class的实现方式是如何呢,首先对于测试集中每张图像,先计算该图像在每个类别的可能性,然后找出最大可能性所对应的索引,索引对应的类别就是程序预测的结果
按照这个逻辑,我们可以先使用predict函数求出每一项的所有类别的可能性,然后使用np.argmax()函数来得到最大可能性所对应的索引,这就是我们的最终结果
测试图像,对应X_test[0]
[3.1139207e-05 2.2548358e-05 3.1966437e-04 9.3736342e-04 6.8001400e-06
1.4975133e-05 9.5684662e-08 9.9833894e-01 7.2426815e-06 3.2126979e-04]
测试图像经过predict()函数得到的可能性列表(索引从0开始),很明显,最大可能性索引为7,输出结果如下
Y_test1= 7
pre_result = 7
修改后的代码(记得 import numpy as np):
prediction = model.predict(X_test)
def pre_results(i):
plot_image(X_test1[i]) # 显示测试集图像
print('Y_test1=',Y_test1[i]) # 显示测试集图像标签编号
print(prediction[i]) # 输出测试集中第i张图片的类别可能性列表
print("pre_result = ",np.argmax(prediction[i])) # 显示预测结果
pre_results(0) # 取测试集中一张图片进行预测
pre_results(2)