lstm的stateless与statefull的区别

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

猜你喜欢

转载自blog.csdn.net/ningyanggege/article/details/80762054
今日推荐