使用MLP(多层感知)算法训练mnist数据集后,然后对mnist数据集的训练数据进行预测并计算其预测的准确率。
y_train_predict = mlp.predict(x_train_normal) accuary = accuracy_score(y_train,y_train_predict) 在运行代码报如下错误 ValueError: Classification metrics can't handle a mix of multilabel-indicator and continuous-multioutput targets
然后百度查看该报错的信息是传入函数的预测结果标签和真实标签的数据属性数量不同,真实标签数据多加了一列序号,因此报错。
于是分别打印了y_train和y_train_predict的数据和维度,查看y_train_predict的数据类型和维度都和真实标签y_train不一样。因此现在都目标是将y_train_predict的数据转换成和y_train的数据类型一样的。
查询资料然后发现之前的predict_classes()已经被弃用,现可以使用predict()和numpy.argmax(y_train_predict,axis=1)结合使用来达到一样的效果。
numpy.argmax()函数是返回该数组的最大值的索引,当axis=0,是在列中比较,选出最大的 行 索引。当axis=1,是在行中比较,选出最大的 列 索引。在多维数组中,axis=-1
表示沿着最后一个维度进行操作。在二维数组中,最后一位(axis=1)和(axis=-1)是一样的。在一维数组中,最后一位(也是第一位)axis=0和axis=-1是一样的。
找到原因后修改代码如下:
y_train_predict = mlp.predict(x_train_normal)
y_train_predict = numpy.argmax(y_train_predict,axis=1)
accuary = accuracy_score(y_train,y_train_predict)
print("train data accuracy:", accuary)
代码运行成功。