【问题标题】:In tensorflow, why do the predictions are two dimensional?在张量流中,为什么预测是二维的?
【发布时间】:2017-09-18 21:01:22
【问题描述】:

在学习 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)) 中,axis 参数是 1?或者说,为什么pred 不止一维?对我来说,pred 应该类似于一维数组。例如。 [0,1,1,1,1] 表示除第一个预测外,其他都正确。为什么我们在 equal 方法之前需要一个 argmax?

谢谢!

【问题讨论】:

    标签: python tensorflow nlp data-science


    【解决方案1】:

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

    然后,这个输出层通常被提供给一个 softmax 函数,该函数将最大值向上推,所有其他的向下推。换句话说,它执行“软”最大值(这里的最大值是指处处为 0 的数组,最大元素中为 1)。

    在代码中,多层感知器函数实际上返回 logits 节点。 Logits 可以看作是每个输出类的“置信度”。最终,您将需要 argmax 来选择学位最高的班级,即您更有信心的班级。

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

    附:请记住,这是一个多类分类问题,其中网络的每个输出节点都与单个类的预测相关联。每个输出节点i 的任务是确定输入是否属于i 类。

    【讨论】:

    • 感谢您的快速回复!我已经编辑了帖子,以便显示链接。您也可以点击这里:github.com/dmesquita/understanding_tensorflow_nn。这确实是一个多类分类问题。而且我想问题确实在于关键字“softmax”。但是为什么在 tensorflow 中预测显示为 softmax 矩阵(一行中只有一个 1)?在链接代码中,“softmax”只出现在loss的定义中。
    • 没错,在代码中,多层感知器函数返回 logits 节点。 Logits 可以看作是每个输出类的“置信度”。最终,您将需要 argmax 来选择学位最高的课程,即您更有信心的课程。
    • 知道了。我检查了 logits 节点信息,你是对的。谢谢朱塞佩!不知道为什么我的问题现在被标记为 -1...我确实尝试以流畅的方式提出问题
    • 我会尝试对其进行编辑以使其对其他人也有用。接受它,如果它解决了你的疑惑
    • 完成。非常好的和有用的建议!
    猜你喜欢
    • 2022-09-29
    • 2017-07-22
    • 2020-06-04
    • 2019-07-20
    • 2020-11-21
    • 1970-01-01
    • 2018-03-05
    • 2019-05-30
    • 2017-11-22
    相关资源
    最近更新 更多