我正在尝试使用 Pytorch 实现字符 LSTM。但是我收到了 cudnn_status_bad_params 错误。这是训练循环。我在 line output = model(input_seq) 上遇到错误。
for epoch in tqdm(range(epochs)):
for i in range(len(seq)//batch_size):
sidx = i*batch_size
eidx = sidx + batch_size
x = seq[sidx:eidx]
x = torch.tensor(x).cuda()
input_seq =torch.nn.utils.rnn.pack_padded_sequence(x,seq_lengths,batch_first = True)
y = out_seq[sidx:eidx]
output = model(input_seq)
loss = criterion(output,y)
loss.backward()
optimizer.step()
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
487 result = self._slow_forward(*input, **kwargs)
488 else:
--> 489 result = self.forward(*input, **kwargs)
490 for hook in self._forward_hooks.values():
491 hook_result = hook(self, input, result)
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/rnn.py in forward(self, …Run Code Online (Sandbox Code Playgroud) fun main() {
var list1 = listOf("AAAA", "ASAS", "ADDAD", "AS")
var list2 = list1
println(list2 === list1)
list2 = list2
.filter { it.length >= 3 }
println(list2 === list1)
}
Run Code Online (Sandbox Code Playgroud)
上述代码的输出是:
true
false
Run Code Online (Sandbox Code Playgroud)
但我很困惑为什么 list1 没有被修改,因为 list1 和 list2 首先引用同一个列表对象。谁能帮我理解这里到底发生了什么?