关于张量流的动态rnn版本中序列长度的混淆

时间:2018-05-04 12:37:50

标签: tensorflow lstm recurrent-neural-network

我正在训练RNN将一系列输入(每个时间步13个值)分类为特定类。
这是我的代码的相关部分(行号前缀)

 50 data = tf.placeholder(tf.float32, [None, 40,13]) #Number of examples, number of input, dimension of each input
 51 target = tf.placeholder(tf.float32, [None, 3])
 52 num_hidden = 24
 53 cell = tf.nn.rnn_cell.LSTMCell(num_hidden,state_is_tuple=True)
 54 val, _ = tf.nn.dynamic_rnn(cell, data, dtype=tf.float32) 

这里我已经为批处理的每个输入序列填充(前缀和值零)以使其为40x13。(填充操作未在上面的代码中显示)
因此,RNN将考虑每个示例的过去40个步骤,然后一个目标的热矢量将告诉它该示例属于哪个类。
另外,我确保每个例子的输出类是1或2(从不为零)。

我看到https://www.tensorflow.org/api_docs/python/tf/nn/dynamic_rnn提到了sequence_length参数。

Que 1)是否可以用于批处理或批处理中的每个示例? Que 2)另外,你能建议我改变每个批次或批次之间的值(取决于哪个),假设我有一个整数数组seq_len,它存储每个批次或每个例子的期望值(以相关者为准)?

[quote] sequence_length :(可选)大小为[batch_size]的int32 / int64向量。超过批处理元素的序列长度时用于复制状态和零输出输出。所以它的正确性要高于性能。[/ quote]

Que 3)假设我将它设置为14 - 这是否意味着RNN将在第14步之后考虑前14个时间步并进行输出状态(称为O 14 )并忽略第15步的输入第40步(将其视为全零)然后将O 14 与目标向量相关联。那么我不必为前缀零填充?
谢谢。
您需要更多代码才能了解这种情况吗?

PS:我的设置

$ python
Python 2.7.12 (default, Dec  4 2017, 14:50:18) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'1.8.0'

1 个答案:

答案 0 :(得分:0)

1)sequence_length一个向量Tensor,其长度等于您的批量大小(所以“是”)

2)假设你的填充是后缀而不是前缀(但听起来就像你想要的那样)。

举个例子,我会查看unit tests