stateful代表除了每个样本内的时间步内传递,而且每个样本之间会有信息(c,h)传递,每个样本指的是一个完整的序列,比如股票预测,时间步为20,特征数为10,数据为20*10;
而stateless指的只是样本内的信息传递;
下面这段话就可以很好的理解:
stateful LSTM:我想根据一篇1000句的文章预测第1001句,每一句是一个sample。我会选用stateful,因为这文章里的1000句是有前后关联的,是有时序的特征的,我不想丢弃这个特征。利用这个时序性能让第一句的特征传递到我们预测的第1001句。(batch_size = 10时)
stateless LSTM:我想训练LSTM自动写诗句,我想训练1000首诗,每一首是一个sample,我会选用stateless LSTM,因为这1000首诗是独立的,不存在关联,哪怕打乱它们的顺序,对于模型训练来说也没区别
tensorflow设置该项的参数:(没有检验过)
rnn_tuple_state = tuple(
[tf.nn.rnn_cell.LSTMStateTuple(l[idx][0], l[idx][1])
for idx in range(num_layers)]
)
outputs, state = tf.nn.dynamic_rnn(cell, x_input_batch, initial_state=rnn_tuple_state)#stateful
init_state=multi_layer_cell.zero_state(sample_num,dtype=tf.float32)
outputs, state = tf.nn.dynamic_rnn(cell, x_input_batch, initial_state=init_state)#stateless