我有一个具有以下一些特征的 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/