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

标签 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 (形状=batch_size x num_steps,所以 10 x 16),然后我得到一个预测张量。

奇怪的是,它的形状是160 x 14313。后者是类的数量。但160从哪里来呢?我不明白。我想知道我的每个类、批处理中每个元素的概率(即 10)。 num_steps 是如何参与其中的,我如何从这个 pred.txt 中读取内容?这 16 个数字之后的张量是预期的元素吗?

最佳答案

在本例中,160 来自您怀疑的形状。
这意味着每批 10 个有 16 个时间步长,当您执行形状变量时,这在技术上是扁平化的。
此时,您的 logits 形状为 160 * 类。因此您可以对每个批处理进行预测[i],然后每个批处理都有可能成为所需的类别。
这就是为什么要获取所选的类,您需要执行类似 tf.argmax(predictions, 1) 的操作来获取具有分类的张量
在您的情况下,形状为 160,因此它将是预测的 每个批处理的类。

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

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

关于machine-learning - 如何解释 TensorFlow 中的预测,它们的形状似乎错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42830097/

相关文章:

machine-learning - 支持向量机的RBF核

python - 生成带日期的随机时间序列数据

machine-learning - 奇怪的验证损失和准确性

machine-learning - 直观理解卷积神经网络中的 1D、2D 和 3D 卷积

machine-learning - tensorflow 模型选择?我选择哪个型号?

machine-learning - 横扫所有机器学习分类器?

numpy - 点积之和

python - Keras、Tensorflow、CuDNN 初始化失败

python - 使用波束搜索实现 seq2seq

python - Keras中同一批训练和评估结果不同