嗨,我正在尝试用11个输入和2个输出构建一个简单的rnn
X=tf.placeholder(tf.float32,[None,n_steps,n_inputs])y=tf.placeholder(tf.int32,[None,n_steps,n_outputs])

我知道rnn的输入形式为[batch_size,n_steps,n_inputs],所以这就是为什么我将占位符设置为这样的原因

但是,当我运行代码时,出现错误


  ValueError:形状必须为等级2,但对于输入形状为[1,270,2],[1,270,2],[]的'in_top_k / InTopKV2'(op:'InTopKV2'),其等级为3。


错误似乎起源于此:correct = tf.nn.in_top_k(logits,tf.reshape(y,[1,n_steps,n_outputs]),1)

我试图重塑logit,挤压logits,扩大y尺寸,但似乎没有任何效果。

我注意到的一个区别是,当我用

tf.squeeze(logits)


错误现在说


  ValueError:形状必须为等级1但为等级3


那是我唯一能够取得的“进步”,任何帮助将不胜感激。

附言:对我好一点这是我的第一个问题

最佳答案

您必须将输入重塑为2D张量,然后可以将结果重塑为所需的形状:

logits_res = tf.reshape(logits, (-1, n_outputs))
y_res = tf.reshape(y, (-1, n_outputs))
correct_res = tf.nn.in_top_k(logits_res, y_res, 1)
correct = tf.reshape(correct_res, (-1, n_steps))

关于python - Tensorflow in_top_kv,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53363349/

10-09 20:21
查看更多