У меня есть тензор Pytorch с формой (batch_size, step, vec_size)
, например, Tensor(32, 64, 128)
, назовем его A.
У меня есть другой Tensor(batch_size, vec_size)
, например, Tensor(32, 128)
, назовем его B.
Я хочу вставить B в определенную позицию на оси 1 из A. Позиции вставки даны в Tensor(batch_size)
с именем P.
Я понимаю, что пустого тензора не существует (например,пустой список) в pytorch, поэтому я инициализирую A как нули и добавляю B в определенную позицию на оси 1 в A.
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 внутри цикла:
for i in range(batch_size):
A_clone = A.clone()
pos = P[i]
A_clone[i][pos] = A_clone[i][pos] + B[i]
Это очень медленноИнтересно, есть ли лучшие решения?Спасибо.