3.1 tensorflow 循环神经网络初探

循环神经网络是有一个状态和输入序列结合拟合出结果,然后状态会继续带入下一个序列

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)):
    print(i)
    berfore_activation = np.dot(state,w_cell_input)+X[i]*w_cell_input +b_cell
    state = np.tanh(berfore_activation)

    # 根据当前时刻的状态计算出最终的输出
    final_output = np.dot(state,w_output) + b_output
    # 输出每个时刻的信息
    print('before activation:',berfore_activation)
    print("stae:",state)
    print("output:",final_output)
    '''
    0
    before activation: [ 0.6  0.5]
    stae: [ 0.53704957  0.46211716]
    output: [ 1.56128388]
    1
    before activation: [ 1.64579508  1.64579508]
    stae: [ 0.92827835  0.92827835]
    output: [ 2.88483504]
    '''

LSTM初探

# 以下是伪代码
import tensorflow as tf
# 在tensorflow中LSTM结构的定义是可以用一个简单的命令生成
lstm = tf.nn.rnn_cell.BasicLSTMCell(lstm_hidden_size)

# 在LSTM中状态初始化全为0的数组
# state是一个包含了两个张量的类,state.c为遗忘门,state.h为输入门
state = lstm.zero_state(batch_size,tf.float32)

loss = 0.0

for i in range(num_steps)
    #在第一个时刻声明LSTM结构中使用的变量,在之后的时刻都需要复用之前定义好的变量
    if i>0:
        tf.get_variable_scope().reuse_variables()
        # 每一步处理时间序列中的一个时刻和前一时刻的状态传入LSTM中就可以得到当前LSTM的输出
        lstm_output, state = lstm(current_input,state)
        
        final_output = fully_connected(lstm_output)
        loss += calc_loss(final_output,expected_output)

    

完整代码示例

import numpy as np
import tensorflow as tf

import matplotlib as mpl
mpl.us
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值