no puede encontrar la operación in situ: una operación in situ modificó una de las variables necesarias para el cálculo del gradiente
Estoy tratando de calcular una pérdida en el jacobiano de la red (es decir, para realizar un backprop doble), y aparece el siguiente error: RuntimeError: una de las variables necesarias para el cálculo del gradiente ha sido modificada por una operación in situ
No puedo encontrar la operación in situ en mi código, así que no sé qué línea corregir.
* El error ocurre en la última línea: loss3.backward ()
inputs_reg = Variable(data, requires_grad=True)
output_reg = self.model.forward(inputs_reg)
num_classes = output.size()[1]
jacobian_list = []
grad_output = torch.zeros(*output_reg.size())
if inputs_reg.is_cuda:
grad_output = grad_output.cuda()
jacobian_list = jacobian.cuda()
for i in range(10):
zero_gradients(inputs_reg)
grad_output.zero_()
grad_output[:, i] = 1
jacobian_list.append(torch.autograd.grad(outputs=output_reg,
inputs=inputs_reg,
grad_outputs=grad_output,
only_inputs=True,
retain_graph=True,
create_graph=True)[0])
jacobian = torch.stack(jacobian_list, dim=0)
loss3 = jacobian.norm()
loss3.backward()