逐步理解RNN

逐步理解RNN循环神经网络:

先了解一下最基本的单层网络,它的结构如图:

https://i-blog.csdnimg.cn/blog_migrate/055f643b6fc46e3ad4bf75158fa183d9.jpeg

输入是x,经过变换Wx+b和激活函数f得到输出y。

前面状态输出会影响后面状态输出的情况有下面几种:

  • 自然语言处理问题。x1可以看做是第一个单词,x2可以看做是第二个单词,依次类推。
  • 语音处理。此时,x1、x2、x3……是每帧的声音信号。
  • 时间序列问题。例如每天的股票价格等等

为了建模序列问题,RNN引入了隐状态h(hidden state)的概念,h可以对序列形的数据提取特征,接着再转换为输出。先从h1的计算开始看:

https://i-blog.csdnimg.cn/blog_migrate/4f38b28568127e996ed77b46f8fd4bb5.jpeg

  • 圆圈或方块表示的是向量。
  • 一个箭头就表示对该向量做一次变换。如上图中h0和x1分别有一个箭头连接,就表示对h0和x1各做了一次变换。

每一步使用的参数U、W、b都是一样的,也就是说每个步骤的参数都是共享的,这点非常重要。

https://i-blog.csdnimg.cn/blog_migrate/e3037b7122c5f5f86198eab2730509da.jpeg

https://i-blog.csdnimg.cn/blog_migrate/c5f0052b066ae7ad0a74d2efd25c4fcb.jpeg

依次计算(使用相同的参数U、W、b)

https://i-blog.csdnimg.cn/blog_migrate/d9cc543c95b27907fd23d477328bd4b2.jpeg

对h1进行一次变换,得到输出y1

https://i-blog.csdnimg.cn/blog_migrate/8471be806fc338dcccab1172ba2b1a93.jpeg

同样使用相同的V和c得到y2、y3、y4

模型构造完成,输入x1,…,xn,输出y1,…,yn,输入和输出序列等长。

时间步time_steps问题的理解:

执行一次call方法,就进行一步转化,从h0->h1:

cell = tf.nn.rnn_cell.BasicRNNCell(num_units=128) 调用一次call方法

使用tf.nn.dynamic_rnn一次执行多步(参数中用到时间步time_steps):

输入数据的格式为(batch_size, time_steps, input_size) time_steps为时间步,表示序列本身的长度,长度为10的句子对应的time_steps就等于10,这样就可以直接输入x1,...,x10,得到h1,...,h10

outputs, state = tf.nn.dynamic_rnn(cell, inputs, initial_state=initial_state)

得到的outputs就是time_steps步里所有的输出。它的形状为(batch_size, time_steps, cell.output_size)。state是最后一步的隐状态,它的形状为(batch_size, cell.state_size)。

堆叠RNNCell

单层RNN的能力有限,我们需要多层的RNN。将x输入第一层RNN的后得到隐层状态h,这个隐层状态就相当于第二层RNN的输入,第二层RNN的隐层状态又相当于第三层RNN的输入,以此类推。在TensorFlow中,可以使用tf.nn.rnn_cell.MultiRNNCell函数对RNNCell进行堆叠

def get_a_cell():

    return tf.nn.rnn_cell.BasicRNNCell(num_units=128)  #每层128个状态

# 用tf.nn.rnn_cell MultiRNNCell创建3层RNN

cell = tf.nn.rnn_cell.MultiRNNCell([get_a_cell() for _ in range(3)]) # 3层RNN

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值