在tensorflow中,为什么预测是二维的?

时间:2017-09-18 21:01:22

标签: python tensorflow nlp data-science

当我学习Tensorflow时,我对输出层张量的尺寸感到困惑。

我正在学习如何在Tensorflow中构建一个多层接受器模型。我的代码是this one

简而言之,它基本上如下框架所示:

def multilayer_perceptron(x, weights, biases):
    :
    :

pred = multilayer_perceptron(x, weights, biases)
    :
    :

with tf.Session() as sess:
    sess.run(init)
         :
    correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))

    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    print ("Accuracy:", accuracy.eval({x: X_test, y: y_test_onehot}))

我了解argmaxequal方法的概念。但是为什么tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))轴参数为1?或者说,为什么pred超过1维?对我来说,pred应该与1D数组相似。例如。 [0,1,1,1,1]表示除第一次预测外,其他均为正确。为什么我们需要在等方法之前使用argmax?

谢谢!

1 个答案:

答案 0 :(得分:0)

当MLP模型用于分类时,通常,最后一层是标准线性层,它将最后一个隐藏层投影到输出层。最后一个单元的数量与您的类数相同(这个输出单元通常称为logits)。

然后,此输出层通常提供给softmax函数,该函数将最大值和其他所有值向下推。换句话说,它执行“软”max(其中max表示无处不在的零数组,最大元素中有一个)。

在代码中,多层感知器函数实际返回logits节点。 Logits可以被视为每个输出类的“置信度”。最后,你需要argmax选择学位最高的班级,你更有信心的班级。

pred函数返回的multilayer_perceptron张量是[batch_size x num_classes]。对于输入中提供的每个示例,您具有num_classes置信度,并且您需要argmax来提取正确类的索引(最大置信度)。

P.S。请记住,这是一个多类分类问题,其中网络的每个输出节点都链接到关于单个类的预测。每个输出节点i的任务是确定输入是否属于i类。