【循环网络】simple recurrent network源码解读

simple-recurrent-network.lua下载源码。

Torch的重要作者之一,Nicolas Leonard对Torch中的nn库进行扩展,发布了rnn库。这个库包含RNN, LSTM, GRU, BRNN, BLSTM等能够处理时序和记忆的网络。

本文以其中Simple Recurrent Network源码为例,讲解Torch中使用RNN1的基本方式。x是自然数序列。

概述

这篇代码实现的功能是:输入一个序列x,能够输出一个序列y。
在真实应用中,输入输出序列可能是不同语种的一句话。这里做了极大简化:y=x+1 mod 10。

网络结构

为了使用RNN,需要包含rnn库:

require 'rnn'

首先设定关键参数。RNN的核心是隐变量 h h h,记录了系统当前时刻的状态。

batchSize = 8
rho = 5 -- sequence length
hiddenSize = 7    -- 隐变量维度
nIndex = 10    -- 输出分类数量
lr = 0.1    --学习率

Recurrent类型

下面可以建立rnn库中的Recurrent类型(参看Recurrent.lua)建立核心模块r

local r = nn.Recurrent(
   hiddenSize,     -- start
   nn.LookupTable(nIndex, hiddenSize),    -- input 
   nn.Linear(hiddenSize, hiddenSize),     -- feedback
   nn.Sigmoid(),     -- transfer
   rho    -- rho
)

创建Recurrent的四个参数意义如下:
start - 指明隐变量维度。或者,指明从inputtransfer模块之间的操作。
input - 指明从输入到隐变量的操作。此处是个nn库中的查找表2
feedback - 从前一时刻transfer之前到当前transfer函数之前的操作,和input结果逐元素相加。此处是个全连接层。
transfer - 非线性函数,可以取ReLU, Sigmoid等。
rho - 反向传播的步数。最多只向前考虑这么多步骤。

参考源码中的updateOutput函数,给出了输入和输出的关系:
o u t p u t t = t r a n s f e r ( f e e d b

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值