Tensorflow:tf.nn.dynamic\u rnn():无法从动态时间的最后一个维度收集输出值

Tensorflow:tf.nn.dynamic\u rnn():无法从动态时间的最后一个维度收集输出值,tensorflow,lstm,recurrent-neural-network,Tensorflow,Lstm,Recurrent Neural Network,我正在尝试使用RNN对新闻文章进行分类。因为新闻文章的长度不是固定的,所以我使用tf.nn.dynamic\u rnn() 上述代码“输出”的张量形状为(批量大小,lstm大小) 我想收集句子末尾的输出,这是动态的。我正在使用下面的命令来实现这一点 outputs = tf.transpose(outputs, [1, 0, 2]) last = tf.gather(outputs, int(outputs.get_shape()[0]) - 1) 我得到以下错误 Traceback (mos

我正在尝试使用RNN对新闻文章进行分类。因为新闻文章的长度不是固定的,所以我使用tf.nn.dynamic\u rnn()

上述代码“输出”的张量形状为(批量大小,lstm大小)

我想收集句子末尾的输出,这是动态的。我正在使用下面的命令来实现这一点

outputs = tf.transpose(outputs, [1, 0, 2])
last = tf.gather(outputs, int(outputs.get_shape()[0]) - 1)
我得到以下错误

Traceback (most recent call last):
  File "./rnn_fitness_level1_0.py", line 127, in <module>
    last = tf.gather(outputs, int(outputs.get_shape()[0]) - 1)
TypeError: __int__ returned non-int (type NoneType)

但我的理解是,通过在整个时间段(句子长度)上取平均值,我并没有利用RNN的潜力来发现序列模式请让我知道您对此的看法。

一般来说,
get\u shape()
是最好的选择。在图形运行之前,Tensorflow并不总是知道张量的形状

你可以尝试很多事情。一种是自己在Python中计算最后一个索引的偏移量,而不使用get_shape;如果您知道输入的大小,这应该不难

另一种选择是使用Tensorflow的切片功能,它支持Numpy样式的“-1”索引来表示最后一个元素。例如,如果
x
是一个三维张量,
x[:,-1,:]
应该切掉中间维度的最后一个元素

有关更多文档,请参见此处的
tf.Tensor.\uuu getitem\uuu
文档:

希望有帮助

Traceback (most recent call last):
  File "./rnn_fitness_level1_0.py", line 127, in <module>
    last = tf.gather(outputs, int(outputs.get_shape()[0]) - 1)
TypeError: __int__ returned non-int (type NoneType)
last = tf.reduce_mean(outputs, [0])