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

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

tensorflow 学习笔记11 最简单的循环神经网络(RNN)_第1张图片

例如一个两轮的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 np
X=[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]




你可能感兴趣的:(tensorflow)