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模块概述 SRU(Spatial Reconstruction Unit,空间重构单元)是SCConv(Space and Channel Convolution, 空间和通道重建卷积)的一部分[^1]。它的主要功能在于通过分离重构的方式抑制空间冗余,从而减少不必要的计算开销并提升特征表达能力。 #### 工作原理 SRU的核心思想是对输入的空间维度进行分解处理,以消除相邻像素间的重复信息。具体而言,它通过对输入特征图的不同方向应用独立的操作来实现这一目标。这种操作可以有效降低因高分辨率图像带来的大量冗余数据的影响,同时保留重要的语义信息。 #### 使用方法 在实际部署中,SRU作为SCConv的一个组成部分被集成到整个网络结构之中。开发者可以通过替换传统卷积层中的标准卷积操作符为SCConv(其中包括SRU),进而间接引入该模块的功能。以下是基于PyTorch框架下如何定义和使用SCConv及其内部组件SRU的一个简单示例: ```python import torch.nn as nn class SCConv(nn.Module): def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1): super(SCConv, self).__init__() # 定义SRU部分 self.sru = SpatialReconstructionUnit(in_channels, out_channels) # 定义CRU部分... def forward(self, x): sru_output = self.sru(x) # 继续处理其他逻辑... class SpatialReconstructionUnit(nn.Module): def __init__(self, in_channels, out_channels): super(SpatialReconstructionUnit, self).__init__() # 初始化参数 def forward(self, input_tensor): # 实现具体的前向传播过程 pass # 应用实例化后的SCConv代替原有conv layer sc_conv_layer = SCConv(in_channels=64, out_channels=128) output_feature_map = sc_conv_layer(input_data) ``` 上述代码片段展示了创建自定义`SCConv`类的过程,并将其应用于特定场景下的方式。其中包含了对`SpatialReconstructionUnit`的调用,这正是我们要讨论的重点——即如何利用SRU完成相应的任务需求。 ### 总结 综上所述,SRU作为一个专门针对空间维度优化设计的小型子模块,在整体架构里扮演着至关重要的角色。借助于其独特的运算模式,不仅能够削减多余的计算负担,而且有助于增强最终输出的质量表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值