Tensorflow中的RNN个人备忘

本文详细介绍了循环神经网络(RNN)的工作原理,包括静态单向、动态单向、动态单层双向、静态单层双向、动态多层双向和静态多层双向等不同类型的RNN实现。重点讲解了这些变体在处理序列数据时的输入输出格式和特点,并给出了如何根据信息需求选择合适输出的建议。内容涵盖了RNN在卷积网络后的特征提取和信息整合方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值