SRU

SRU算法在文献Training RNNs as Fast as CNNs中提出.目的是针对RNN中当前step t的输出 ht 依赖于前一时刻 ht1 的输出,而导致无法进行并行计算,计算速度过慢.SRU通过有对LSTM循环单元进行简单化计算,使得计算过程可以并行,具体SRU计算公式如下:

img

对于输入 xt ,公式3,4,5可以并行计算.计算 x˜tftrt 后,公式 6 和 7 能够非常迅速和简洁的执行计算,因为它们的运算都是对应元素之间的操作。 SRU 实现相比于简单的 LSTM 实现可快 5 倍。

算法流程:

img

分类精度对比:

img

问答效果:

img

由此可将,在保证精度不下降的情况下,SRU比LSTM速度快了6倍以上.

pytorch代码:https://github.com/taolei87/sru

src调用方法:

import torch
from torch.autograd import Variable
from cuda_functional import SRU, SRUCell

# input has length 20, batch size 32 and dimension 128
x = Variable(torch.FloatTensor(20, 32, 128).cuda())

input_size, hidden_size = 128, 128

rnn = SRU(input_size, hidden_size,
    num_layers = 2,          # number of stacking RNN layers
    dropout = 0.0,           # dropout applied between RNN layers
    rnn_dropout = 0.0,       # variational dropout applied on linear transformation
    use_tanh = 1,            # use tanh or identity activation
    bidirectional = False    # bidirectional RNN ?
)
rnn.cuda()

output, hidden = rnn(x)
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值