tensorflow中dynamic_rnn与static_rnn区别

rnn在计算变长文本的时候,使用dynamic_rnn更加节省计算量,推荐使用这个。但是这两个在使用上是有区别的,具体区别如下:
static_rnn 输入的list的大小[序列长度,batch_size,embed大小],所以一一般在经过embed层后,使用x = tf.unstack(embed, seq_len, 1)变换为[序列长度,batch_size,embed大小],然后输入到static_rnn,输出也是list,大小形状为[seq_len,batch_size,hidden_size],所以我们取最后一个的输出就直接为static_rnn_out[-1],但是我们的dynamic_rnn不是这样,它的输入是[batch,seq_len,input],所以一般经过embeding层后不需要变化直接输入dynamic_rnn里面,然后输出结果为dynamic_rnn_out,他的shape为[batch,seq_len,hidden_size] ,这样我们要取到最后一个的输出,需要多维度进行一个转化:tf.transpose(dynamic_rnn_out, [1, 0, 2]),然后才可以去计算loss和accuracy等。

你可能感兴趣的:(tensorflow)