【发布时间】:2019-04-25 13:22:04
【问题描述】:
我有一个形状为(batch_size, step, vec_size)的pytorch Tensor,例如Tensor(32, 64, 128),我们称之为A。
我还有另一个Tensor(batch_size, vec_size),例如Tensor(32, 128),我们就叫它B吧。
我想将 B 插入到 A 轴 1 的某个位置。插入位置在 Tensor(batch_size) 中给出,命名为 P。
我知道 pytorch 中没有 Empty tensor(如空列表),因此,我将 A 初始化为零,并在 A 的轴 1 的某个位置添加 B。
A = Variable(torch.zeros(batch_size, step, vec_size))
我正在做的是这样的:
for i in range(batch_size):
pos = P[i]
A[i][pos] = A[i][pos] + B[i]
但我得到一个错误:
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation
然后,我在循环中复制 A each:
for i in range(batch_size):
A_clone = A.clone()
pos = P[i]
A_clone[i][pos] = A_clone[i][pos] + B[i]
这对于autograd来说很慢,不知道有没有更好的解决方案?谢谢。
【问题讨论】:
标签: pytorch