Python 动态RNN填充和索引以匹配基本事实

Python 动态RNN填充和索引以匹配基本事实,python,indexing,tensorflow,tensor,Python,Indexing,Tensorflow,Tensor,我正在运行RNN(多对多)。我对每个用户都有不同的时间维度。例如,用户1有5个时间戳,用户2有8个时间戳,等等。我认为RNN只接受具有恒定维度的张量,因此我目前用零填充(不使用tensorflow)时间维度,直到它达到批处理中所有用户中的最大时间戳(max_user_time)。例如,如果用户#1有2个时间戳和3个特征,我得到一个维度为[1,2,3]的张量: |1 2| |2 5| |6 3| 如果批处理中的用户3有3个时间戳,那么我们需要添加pading,以便用户1有一个维度为[1,3,3]

我正在运行RNN(多对多)。我对每个用户都有不同的时间维度。例如,用户1有5个时间戳,用户2有8个时间戳,等等。我认为RNN只接受具有恒定维度的张量,因此我目前用零填充(不使用tensorflow)时间维度,直到它达到批处理中所有用户中的最大时间戳(max_user_time)。例如,如果用户#1有2个时间戳和3个特征,我得到一个维度为[1,2,3]的张量:

|1 2|
|2 5|
|6 3|
如果批处理中的用户3有3个时间戳,那么我们需要添加pading,以便用户1有一个维度为[1,3,3]的张量:

|1 2 0|
|2 5 0|
|6 3 0|
每个用户的填充将具有不同的长度

有没有一种方法可以让所有用户同时使用tf.pad或类似的东西来实现这一点

填充后,我将这些张量作为输入传递给RNN,并重塑输出:

outputs,states=tf.nn.dynamic_rnn(lstm_cell,inputs=input
                                     ,dtype=tf.float32,sequence_length=max_batch)

reshape_out=tf.reshape(outputs,[-1,n_hidden])
对于sequence length参数,我传递了一个带有每个用户时间戳的向量,因此根据文档,如果用户已通过其最大时间,则预期输出为零

所以,我从重塑张量大小的[batch\u sizeXmax\u user\u time,n\u hidden]中得到

这是一个比地面真值tesnor更大的张量,地面真值tesnor更小,每个用户根据其时间戳有行

是否有一种简单的方法可以使用tensorflow只选取观察到的行来计算损失