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)
SRU (Switchable Recurrent Unit) 是一种循环神经网络 (RNN) 的变种,它在处理序列数据时表现出很好的性能。SRU 的特点是它使用了门控机制,可以自适应地选择性地更新隐藏状态。 在 MATLAB 中,你可以使用以下代码创建一个 SRU 模型: ```matlab % 导入 SRU 相关函数 addpath('path_to_sru_folder'); % 设置模型参数 inputSize = 100; % 输入维度 hiddenSize = 200; % 隐藏层维度 outputSize = 10; % 输出维度 % 创建 SRU 模型 sruModel = sruCreateModel(inputSize, hiddenSize, outputSize); % 设置训练参数 learningRate = 0.01; numEpochs = 20; % 准备训练数据 trainData = ...; % 准备训练数据 % 开始训练 for epoch = 1:numEpochs % 在每个 epoch 中对训练数据进行训练 for i = 1:size(trainData, 2) input = trainData(:, i); target = ...; % 准备目标数据 % 前向传播 output = sruForward(sruModel, input); % 计算损失 loss = computeLoss(output, target); % 反向传播 gradient = computeGradient(output, target); sruModel = sruBackward(sruModel, input, gradient, learningRate); end % 输出当前 epoch 的损失 disp(['Epoch ', num2str(epoch), ': Loss = ', num2str(loss)]); end % 使用训练好的模型进行预测 testData = ...; % 准备测试数据 predictions = []; for i = 1:size(testData, 2) input = testData(:, i); output = sruForward(sruModel, input); predictions = [predictions, output]; end ``` 注意,以上代码只是一个示例,具体的实现细节可能会根据你的数据和需求而有所变化。你需要根据你的具体情况调整模型参数、数据处理和训练过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值