首页 文章

MultiClass Keras分类器预测输出含义

提问于
浏览
0

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

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

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

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

这是我的模型示例:

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 回答

  • 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是否表示神经网络预测为“橙色”?

    如果以上持有,是的 .

相关问题