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()

Respuestas a la pregunta(3)

Su respuesta a la pregunta