tensorflow 学习笔记11 最简单的循环神经网络(RNN)

来源:互联网 发布:手机网络运营商无服务 编辑:程序博客网 时间:2024/06/07 18:29

RNN的主要用途是处理与预测序列数据,在语音识别、语言模型、机器翻译以及时序分析等方面应用广泛。RNN会记忆之前的信息,并利用之前的信息影响后面的节点输出。也就是说,循环神经网络的隐藏层之间的结点是有连接的,隐藏僧的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。

例如一个两轮的RNN模型:

初始W0=[0.0,0.0] Wrnn=[[0.1,0.2],[0.3,0.4],[0.5,0.6]]  brnn=[0.1,-0.1] Woutput=[[1.0],[2.0]]  boutout=0.1  X=[1,2]

则对应x0=1,x1=2

第一轮A里面的计算tanh([W0,x0]*Wrnn+brnn)=[0.537,0.462]将这个结果一方面输出h0=[0.537,0.462]*Woutput+boutput=1.56输出,另一方面传给下一轮的A

第二轮A里面的计算tanh([0.537,0.462,x1]*Wrnn+brnn)=[0.860,0.884]将这个结果一方面输出h1=[0.860,0.884]*Woutput+boutput=2.73输出,另一方面如果有下一轮继续传

代码实现:

import numpy as npX=[1,2]state=[0.0,0.0]#分开定义不同输入部分的权重方便操作w_cell_state=np.asarray([[0.1,0.2],[0.3,0.4]])w_cell_input=np.asarray([0.5,0.6])b_cell=np.asarray([0.1,-0.1])#定义用于输出的全连接层参数w_output=np.asarray([[1.0],[2.0]])b_output=0.1#按照时间顺序执行循环神经网络的前向传播过程for i in range(len(X)):    #计算循环体中的全连接层神经网络    before_activation=np.dot(state,w_cell_state)+X[i]*w_cell_input+b_cell    state=np.tanh(before_activation)    #根据当前时刻状态计算最终输出    final_output=np.dot(state,w_output)+b_output    print("output: h",i,final_output)

结果:

output: h 0 [ 1.56128388]output: h 1 [ 2.72707101]




原创粉丝点击