我有一个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个数后的预期元素?
答案 0 :(得分:2)
在这种情况下,160来自您怀疑的形状
这意味着对于每批10个,有16个时间步长,当你做形状变量时,这在技术上是扁平的。
此时,您有形状160 *类的logits。所以你可以为每个批次做predictions[i]
,然后每个类的概率都是所需的类
这就是为什么要获得所选择的课程,你会做tf.argmax(predictions, 1)
之类的事情来获得分类的张量
在你的情况下,这将是160的形状,所以它将是预测的
每个批次的课程。
为了获得概率,您可以使用logits:
def prob(logit):
return 1/(1 + np.exp(-logit)