MultiClass Keras分类器预测输出含义

时间:2018-01-09 21:34:17

标签: tensorflow machine-learning neural-network keras one-hot-encoding

我有一个使用Scikit-Learn API的Keras包装器构建的Keras分类器。神经网络有10个输出节点,训练数据全部用单热编码表示。

根据Tensorflow documentationpredict函数输出(n_samples,)的形状。当我拟合514541个样本时,该函数返回了一个形状为(514541, )的数组,并且该数组的每个条目的范围都是0到9。

由于我有十个不同的输出,每个条目的数值是否与我在训练矩阵中编码的结果完全一致?

即。如果y_train的单热编码的索引5表示"橙",预测值5意味着神经网络预测"橙"?

以下是我的模型示例:

model = Sequential()
model.add(Dropout(0.2, input_shape=(32,) ))

model.add(Dense(21, activation='selu'))
model.add(Dropout(0.5))

model.add(Dense(10, activation='softmax'))

1 个答案:

答案 0 :(得分:2)

您的问题存在一些问题。

  

神经网络有10个输出节点,训练数据全部用单热编码表示。

由于您的网络有10个输出节点,并且您的标签是单热编码的,因此您的模型的输出也应该是10维的,并且再次进行热编码,即形状(n_samples, 10)。此外,由于您对最后一层使用softmax激活,因此您的10维输出的每个元素都应该在[0,1]中,并解释为输出属于相应的概率(一个热点)编码)类。

  

根据Tensorflow文档,预测函数输出(n_samples,)的形状。

令人费解的是你提到Tensorflow的原因,而你的模型显然是Keras的模型;您应该参考Keras sequential APIpredict方法。

  

当我拟合514541个样本时,该函数返回一个形状为(514541, )的数组,并且该数组的每个条目的范围为0到9。

如果出现类似的情况,那么必定是由于您的代码中的后续部分未在此处显示;无论如何,我们的想法是找到每个10维网络输出中具有最高值的参数(因为它们被解释为概率,直观的是具有最高值的元素将是最有可能的)。换句话说,在代码中的某处必须有这样的东西:

pred = model.predict(x_test)
y = np.argmax(pred, axis=1) # numpy must have been imported as np

将提供一个形状(n_samples,)的数组,每个y都是一个0到9之间的整数,在您报告时。

  

即。如果y_train的单热编码的索引5代表"橙",预测值5意味着神经网络预测"橙"?

如果上述情况持续,是的。