多类 Keras 分类器预测输出含义



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

根据 Tensorflow 文档,predict函数输出的形状为(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'))

你的问题有一些问题。

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

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

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

令人费解的是,为什么你引用Tensorflow,而你的模型显然是Keras模型;你应该参考Keras顺序API的predict方法。

当我拟合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 是否意味着神经网络预测了"橙色"?

前提是上述情况成立,是的。

最新更新