解决AttributeError: ‘Sequential‘ object has no attribute ‘predict_classes‘

@TOC

问题原因:在Sequential的网络架构中并没有predict_classes方法

解决

虽然没有给出predict_classes方法,但在Sequential中有predict方法,我们可以得到对于不同类别分类的概率

prediction = network.predict(x_test)

解决AttributeError: ‘Sequential‘ object has no attribute ‘predict_classes‘_第1张图片

network是我们构建的Sequential网络,x_test是测试集的数据部分
在这里我们得到的prediction实际上是一个二维矩阵,它的维度是(len(x_test), 类别数)
我们希望将所有预测的结果放在prediction中(单个预测结果指的是对应最大概率中的类别)
(1)对于二分类问题,以0.5为界(IMDB数据集分类)
假设对应概率大于0.5为正例,否则为负例
这里二分类得到的是列数为1的矩阵解决AttributeError: ‘Sequential‘ object has no attribute ‘predict_classes‘_第2张图片

我们首先将prediction转换为一个数组,prediction[i]表示第i个样本对应的分类
为了方便区分,我们用results表示得到的一维数组

results = []
for i in range(len(prediction)):
	if prediction[i][0] > 0.5:
		p = 1
	else: 
		p = 0
	results.append(p)

上面的代码也可以用列表解析来实现

results = [(int)((prediction[i][0] + 0.5) / 1) for i in range(len(prediction))]

将数据转换为向量

results = np.asarray(predictions).astype('float32')

画出二元分类的混淆矩阵
用测试集的标签和得到的结果对比

import pandas as pd
pd.crosstab(test_labels, results, rownames = ['labels'], colnames = ['predicts'])

y_test是将测试标签进行向量化得到的结果

解决AttributeError: ‘Sequential‘ object has no attribute ‘predict_classes‘_第3张图片
查看对应的查准率、查全率、F1-score

from sklearn.metrics import classification_report
print(classification_report(y_test, prediction))

解决AttributeError: ‘Sequential‘ object has no attribute ‘predict_classes‘_第4张图片

2、reuters新闻分类也可以使用这种方法
与二分类不同,我们需要获取的是最大概率对应的类别

results = [np.argmax(prediction[i]) for i in range(len(prediction))]

其余的代码和上面的代码类似,在此不重复赘述

你可能感兴趣的:(深度学习,神经网络,机器学习)