如何解释TensorFlow中的预测,它们似乎有错误的形状

时间:2017-03-16 09:33:14

标签: machine-learning tensorflow deep-learning

我有一个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个数后的预期元素?

1 个答案:

答案 0 :(得分:2)

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

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

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