lstm 的timestep_如何理解LSTM中的time step?

更正下答案:

训练和测试的数据必须长度一致,因为rnn里weights的shape是和timestep的长度对应的(旧答案请忽略)rnn分类器里使用的训练和测试确实都是一个长度。如果不一致可以用0填充。如果用tf自己封装rnn的话,可以灵活的处理,但是输入的时候一般还是会用pad标记(一般是0)填充。

有个特殊例子是出现在seq2seq上的,因为两种语言的句子长度变化比较大,所以用了分组的方式去重排数据(bucket方式)。bucket的例子可以看下tensorflow的官方教程。但bucket内部t的长度也是一致的。

理解timestep可以简单的想像下:有一个时间序列的数据(声音、股票、电影),一个单层神经网络,你每次都把数据中的一帧输入到同样的这个神经网络,并且把这个网络的输出存好,等输完了最后一帧了,用所有的输出拿来算梯度、更新权值(时序反向传播BPTT)。这个过程就是RNN了。

--------------------评论里的补充------

可是我看了一个【TensorFlow cook book】里给了个处理自然语言的例子,它的代码里,给出预测时的time step就是1,可是训练的时候不是1。我也认为按矩阵来理解weight的纬度应该是与time step有关的,可是我找到一些网上LSTM处理时间序列的问题里,他们的test 和train 的time step好像都不一样(自然语言啊。和一些股票指数预测)。所以我觉得有点奇怪...也不好解释

应该是这个吧,eval的时候,作者只用前一个单词预测下一个。如我上面所说,tf可以自己定制timestep的部分。

tf里是这样自己定制,在keras以及日常应用中,很少见到训练和测试测timestep 不一样,如果有例子,可以分享下

你可能感兴趣的