- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 pytorch 0.4.0 版本中,有一个 nn.LayerNorm模块。
我想在我的 LSTM 网络中实现这一层,尽管我在 LSTM 网络上找不到任何实现示例。
pytorch 贡献者暗示这 nn.LayerNorm
仅适用于 nn.LSTMCell
s。
如果我能得到任何 git repo 或一些实现 nn.LayerNorm
的代码,那将是一个很大的帮助。在 nn.LSTMcell
或任何 Torch LSTM 网络。
提前致谢
最佳答案
我也在寻找解决方案。这是来自 https://github.com/pytorch/pytorch/issues/11335 的示例
感谢@jinserk
class LayerNormLSTMCell(nn.LSTMCell):
def __init__(self, input_size, hidden_size, bias=True):
super().__init__(input_size, hidden_size, bias)
self.ln_ih = nn.LayerNorm(4 * hidden_size)
self.ln_hh = nn.LayerNorm(4 * hidden_size)
self.ln_ho = nn.LayerNorm(hidden_size)
def forward(self, input, hidden=None):
self.check_forward_input(input)
if hidden is None:
hx = input.new_zeros(input.size(0), self.hidden_size, requires_grad=False)
cx = input.new_zeros(input.size(0), self.hidden_size, requires_grad=False)
else:
hx, cx = hidden
self.check_forward_hidden(input, hx, '[0]')
self.check_forward_hidden(input, cx, '[1]')
gates = self.ln_ih(F.linear(input, self.weight_ih, self.bias_ih)) \
+ self.ln_hh(F.linear(hx, self.weight_hh, self.bias_hh))
i, f, o = gates[:, :(3 * self.hidden_size)].sigmoid().chunk(3, 1)
g = gates[:, (3 * self.hidden_size):].tanh()
cy = (f * cx) + (i * g)
hy = o * self.ln_ho(cy).tanh()
return hy, cy
class LayerNormLSTM(nn.Module):
def __init__(self, input_size, hidden_size, num_layers=1, bias=True, bidirectional=False):
super().__init__()
self.input_size = input_size
self.hidden_size = hidden_size
self.num_layers = num_layers
self.bidirectional = bidirectional
num_directions = 2 if bidirectional else 1
self.hidden0 = nn.ModuleList([
LayerNormLSTMCell(input_size=(input_size if layer == 0 else hidden_size * num_directions),
hidden_size=hidden_size, bias=bias)
for layer in range(num_layers)
])
if self.bidirectional:
self.hidden1 = nn.ModuleList([
LayerNormLSTMCell(input_size=(input_size if layer == 0 else hidden_size * num_directions),
hidden_size=hidden_size, bias=bias)
for layer in range(num_layers)
])
def forward(self, input, hidden=None):
seq_len, batch_size, hidden_size = input.size() # supports TxNxH only
num_directions = 2 if self.bidirectional else 1
if hidden is None:
hx = input.new_zeros(self.num_layers * num_directions, batch_size, self.hidden_size, requires_grad=False)
cx = input.new_zeros(self.num_layers * num_directions, batch_size, self.hidden_size, requires_grad=False)
else:
hx, cx = hidden
ht = [[None, ] * (self.num_layers * num_directions)] * seq_len
ct = [[None, ] * (self.num_layers * num_directions)] * seq_len
if self.bidirectional:
xs = input
for l, (layer0, layer1) in enumerate(zip(self.hidden0, self.hidden1)):
l0, l1 = 2 * l, 2 * l + 1
h0, c0, h1, c1 = hx[l0], cx[l0], hx[l1], cx[l1]
for t, (x0, x1) in enumerate(zip(xs, reversed(xs))):
ht[t][l0], ct[t][l0] = layer0(x0, (h0, c0))
h0, c0 = ht[t][l0], ct[t][l0]
t = seq_len - 1 - t
ht[t][l1], ct[t][l1] = layer1(x1, (h1, c1))
h1, c1 = ht[t][l1], ct[t][l1]
xs = [torch.cat((h[l0], h[l1]), dim=1) for h in ht]
y = torch.stack(xs)
hy = torch.stack(ht[-1])
cy = torch.stack(ct[-1])
else:
h, c = hx, cx
for t, x in enumerate(input):
for l, layer in enumerate(self.hidden0):
ht[t][l], ct[t][l] = layer(x, (h[l], c[l]))
x = ht[t][l]
h, c = ht[t], ct[t]
y = torch.stack([h[-1] for h in ht])
hy = torch.stack(ht[-1])
cy = torch.stack(ct[-1])
return y, (hy, cy)
关于lstm - nn.LSTMCell 的 torch 0.4.0 nn.LayerNorm 示例的任何示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50147001/
我想向 Torch 添加一个损失函数,用于计算预测值和目标值之间的编辑距离。 有没有一种简单的方法来实现这个想法? 还是我必须编写自己的具有向后和向前功能的类? 最佳答案 如果您的标准可以表示为现有模
我如何沿着 torch 中的列求和?我有一个 128*1024 的张量,我想通过对所有行求和得到一个 1*1024 的张量。 例如:一个: 1 2 3 4 5 6 我想要b 5 7 9 最佳答案 为此
阅读pytorch文档后,我仍然需要帮助来理解torch.mm、torch.matmul和torch.mul之间的区别.由于我不完全理解它们,我无法简明扼要地解释这一点。 B = torch.tens
minibatch = torch.Tensor(5, 2, 3,5) m = nn.View(-1):setNumInputDims(1) m:forward(minibatch) 给出一个大小
有两个 PyTorch 存储库: https://github.com/hughperkins/pytorch https://github.com/pytorch/pytorch 第一个显然需要 T
晚上好, 我刚刚安装了 PyTorch 0.4.0,我正在尝试执行第一个教程“什么是 PyTorch?” 我编写了一个 Tutorial.py 文件,我尝试使用 Visual Studio Code
我有一个浮点值列表(或一个 numpy 数组)。我想创建一个包含所有这些值的一维 torch 张量。我可以创建 torch 张量并运行循环来存储值。 但我想知道有没有什么办法,我可以使用列表或数组中的
这是我在将 convertinf DQN 转换为 Double DQN 来解决 cartpole 问题时遇到的问题。我快要弄清楚了。 tensor([0.1205, 0.1207, 0.1197, 0
鉴于: x_batch = torch.tensor([[-0.3, -0.7], [0.3, 0.7], [1.1, -0.7], [-1.1, 0.7]]) 然后申请 torch.sigmoid(
我正在学习一门类(class),该类(class)使用已弃用的 PyTorch 版本,该版本不会根据需要将 torch.int64 更改为 torch.LongTensor。当前引发错误的代码部分是:
我正在尝试从 this repo 运行代码.我通过将 main.py 中的第 39/40 行从更改为禁用了 cuda parser.add_argument('--type', default='to
从 0.4.0 版本开始,可以使用 torch.tensor 和 torch.Tensor 有什么区别?提供这两个非常相似且令人困惑的替代方案的原因是什么? 最佳答案 在 PyTorch 中,torc
用于强化学习的 OpenAI REINFORCE 和 actor-critic 示例具有以下代码: REINFORCE : policy_loss = torch.cat(policy_loss).s
我在装有 CentOS Linux 7.3.1611(核心)操作系统的计算机上使用 Python 3.5.1。 我正在尝试使用 PyTorch 并开始使用 this tutorial . 不幸的是,示
我正在尝试使用 torch.load 加载预训练模型。 我收到以下错误: ModuleNotFoundError: No module named 'utils' 我已通过从命令行打开它来检查我使用的
这篇文章与我之前的 How to define a Python Class which uses R code, but called from rTorch? 有关. 我在 R ( https:/
是否torch.manual_seed包括torch.cuda.manual_seed_all的操作? 如果是,我们可以使用 torch.manual_seed设置种子。否则我们应该调用这两个函数。
我们可以使用 torch.Tensor([1., 2.], device='cuda') 在 GPU 上分配张量.使用这种方式而不是torch.cuda.Tensor([1., 2.])有什么不同吗?
我正在尝试深入了解 PyTorch 张量内存模型的工作原理。 # input numpy array In [91]: arr = np.arange(10, dtype=float32).resha
我同时安装了 python38,37 和 anaconda,操作系统 - win10,x64。 我无法在 py38,37 中安装 torch - 但在 anaconda 中安装了它。 系统环境变量“路
我是一名优秀的程序员,十分优秀!