1、理解RNN的工作流程
2、了解基本的RNN类型
3、料及cell类:
注意:
1静态单向:tf.contrib.rnn.static_rnn结果可直接取output[-1], output.shape->[time,cellnum(rnn提取的特征)],输入input的size需要是list或者是二维的张量,list的顺序就是时间序列。元素就是每一个序列的值(batch单个时间序列的输入元素个数)。如:原始的输入数据是单通道[batch,height,width]形式,将height方向作为时间序列,通过x1 = tf.unstack(input, batch, 1)将输入的input [batch,height(time)),width]装换成time(height)个batchwidth输入数据。(因此在通过卷积网络做特征提取时候后期需要设计使得经过卷积的input的shape可以经过适当的变换输入到RNN中)
2动态单向:tf.contrib.rnn.dynamic_rnn结果先需要transpose,将结果output的格式从[batch,time,cellnum(rnn提取的特征)]变成[time,batch,cellnum(rnn提取的特征)],再用output[-1]取最后一个序列的特征传入后续计算,当然也可以不是output[-1]而是整个儿output(这个根据单幅图像对应的time个序列所含的信息量决定的,每个time含有不同的信息就考虑用所有的output,若每个timed的提取信息目标一致则可以取最后的一个time结果)用完整的output参考FOT中的RNN后续处理方式。输入RNN的input的size需要一般是三维的张量[batch,time,…],…是具体的数据,无论原始的input[batch,height,width,channels1]经过卷积后变成多少个channels2,经过变换后需要变成input [batch,height(time)),width*channels2],以次输入RNN。
上方是单向的(包括单层和多层)
3动态单层双向:tf.nn.bidirectional_dynamic_rnn结果output是一个tuple包含(output_fw,output_bw),每一个张量[batch,time,layersoutput(cellnum)],总的结果需要用tf.concat链接起来后续数据的使用参考2中的建议来,transpose后取output[-1]或者不transpose用其他方式取整个output。输入RNN的input的size需要一般是三维的张量[batch,time,…],…是具体的数据,无论原始的input[batch,height,width,channels1]经过卷积后变成多少个channels2,经过变换后需要变成input [batch,height(time)),width*channels2],以次输入RNN。
4静态单层双向:tf.nn.static_bidirectional_rnn结果output是一个长度为time的list,每个list中是batch*(2cellnum)即无需concat,双向已经链接,后续数据的使用参考2中的建议来。输入RNN的input的size需要一般是三维的张量[batch,time,…],…是具体的数据,无论原始的input[batch,height,width,channels1]经过卷积后变成多少个channels2,经过变换后需要变成input [batch,height(time)),widthchannels2],通过x1 = tf.unstack(input, batch, 1)将输入的input [batch,height(time)),widthchannels2]装换成time(height)个batch(width*channels2)输入数据以输入RNN。(因此在通过卷积网络做特征提取时候后期需要设计使得经过卷积的input的shape可以经过适当的变换输入到RNN中)
5动态多层双向:stack_bidirectional_dynamic_rnn结果output是一个张量[batch,time,layersoutput(cellsnum2)],包含concat之后的正向和反向输出。输入RNN的input的size需要一般是三维的张量[batch,time,…],…是具体的数据,无论原始的input[batch,height,width,channels1]经过卷积后变成多少个channels2,经过变换后需要变成input [batch,height(time)),widthchannels2],以次输入RNN。
6静态多层双向:stack_bidirectional_rnn结果output是一个长度为time的list,每个list中是batch*(2cellnum)即无需concat,双向已经链接,后续数据的使用参考2中的建议来。输入RNN的input的size需要一般是三维的张量[batch,time,…],…是具体的数据,无论原始的input[batch,height,width,channels1]经过卷积后变成多少个channels2,经过变换后需要变成input [batch,height(time)),widthchannels2],以次输入RNN。