gpt4 book ai didi

lstm - 将 LSTM 中的 Tanh 激活更改为 ReLU

转载 作者:行者123 更新时间:2023-12-04 18:01:21 25 4
gpt4 key购买 nike

LSTM 类中的默认非线性激活函数是 tanh。我希望在我的项目中使用 ReLU。浏览文档和其他资源,我无法找到一种简单的方法来做到这一点。我能找到的唯一方法是定义我自己的自定义 LSTMCell,但是 here作者说自定义 LSTMCells 不支持 GPU 加速功能(或者自文章发表后是否发生了变化?)。我需要使用 CUDA 来加速我的训练。任何帮助,将不胜感激。

最佳答案

自定义 LSTMCells 不支持 GPU 加速功能 - 此声明可能意味着如果您使用 LSTMCells,GPU 加速功能将受到限制。当然,您可以编写自己的 LSTM 实现,但需要牺牲运行时间。

例如,一旦我实现了如下的 LSTM(基于线性层),它所花费的时间是 LSTM 的 2~3 倍(在 PyTorch 中提供)用作深度神经模型的一部分时。

class LSTMCell(nn.Module):
def __init__(self, input_size, hidden_size, nlayers, dropout):
""""Constructor of the class"""
super(LSTMCell, self).__init__()

self.nlayers = nlayers
self.dropout = nn.Dropout(p=dropout)

ih, hh = [], []
for i in range(nlayers):
ih.append(nn.Linear(input_size, 4 * hidden_size))
hh.append(nn.Linear(hidden_size, 4 * hidden_size))
self.w_ih = nn.ModuleList(ih)
self.w_hh = nn.ModuleList(hh)

def forward(self, input, hidden):
""""Defines the forward computation of the LSTMCell"""
hy, cy = [], []
for i in range(self.nlayers):
hx, cx = hidden[0][i], hidden[1][i]
gates = self.w_ih[i](input) + self.w_hh[i](hx)
i_gate, f_gate, c_gate, o_gate = gates.chunk(4, 1)

i_gate = F.sigmoid(i_gate)
f_gate = F.sigmoid(f_gate)
c_gate = F.tanh(c_gate)
o_gate = F.sigmoid(o_gate)

ncx = (f_gate * cx) + (i_gate * c_gate)
nhx = o_gate * F.tanh(ncx)
cy.append(ncx)
hy.append(nhx)
input = self.dropout(nhx)

hy, cy = torch.stack(hy, 0), torch.stack(cy, 0)
return hy, cy

我很高兴知道 LSTM 的自定义实现的运行时间是否可以改进!

关于lstm - 将 LSTM 中的 Tanh 激活更改为 ReLU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49040180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com