【问题标题】:How to interpret predictions in TensorFlow, they seem to have the wrong shape如何解释 TensorFlow 中的预测,它们的形状似乎错误
【发布时间】:2017-03-16 09:33:14
【问题描述】:

我有一个具有以下一些特征的 TensorFlow 模型:

    state_size = 800,
    num_classes = 14313,
    batch_size = 10,
    num_steps = 16, # width of the tensor
    num_layers = 3

   x = tf.placeholder(tf.int32, [batch_size, num_steps], name='input_placeholder')
   y = tf.placeholder(tf.int32, [batch_size, num_steps], name='labels_placeholder')
   rnn_inputs = [tf.squeeze(i, squeeze_dims=[1]) for i in
                  tf.split(x_one_hot, num_steps, 1)]  # still a list of tensors (batch_size, num_classes)
   ...
   logits = tf.matmul(rnn_outputs, W) + b

   predictions = tf.nn.softmax(logits)

现在我想给它一个 np.array (shape = batch_size x num_steps, 所以 10 x 16) 我得到一个预测张量。

奇怪的是,它的形状是 160 x 14313。后者是类的数量。但是 160 是从哪里来的呢?我不明白。我想对我的每个班级、批次的每个元素(即 10)都有一个概率。 num_steps 是如何参与其中的,我如何从这个 pred 中阅读。张量是这 16 个数字之后的预期元素?

【问题讨论】:

    标签: machine-learning tensorflow deep-learning


    【解决方案1】:

    在这种情况下,160 来自您怀疑的形状。
    这意味着对于每批 10 个,有 16 个时间步长,当你做你的形状变量时,这在技术上是扁平的。
    此时你有形状为 160 * 类的 logits。所以你可以为每个批次做predictions[i],然后每个班级都有可能成为所需班级。
    这就是为什么要获得所选择的类,你会做类似tf.argmax(predictions, 1) 的事情来获得具有分类的张量
    在您的情况下,这将具有 160 的形状,因此它将是预测的 每个批次的类。

    为了获得概率,您可以使用logits

    def prob(logit):
        return 1/(1 + np.exp(-logit)        
    

    【讨论】:

    • 我明白了,谢谢。 softmax 没有给我正确的概率吗?我应该使用exp函数吗?所以我认为在我的情况下,我实际上应该只预测一个值而不是 16。我已将其发布在另一个问题中以避免混淆。 stackoverflow.com/questions/42766458/…
    • tf.nn.softmax 通过 softmax 层计算前向传播。当您计算模型输出的概率时,您可以在评估模型期间使用它。所以是的,它会给你正确的概率,我想用 logits 提供另一种方法。
    • 与此有关。我似乎不知道哪个标签与哪个预测值相关。这应该很容易得到吧? stackoverflow.com/questions/43039055/…
    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 2020-09-15
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2019-03-19
    相关资源
    最近更新 更多