Код: Выделить всё
def load_weights(model, names, orig_params, new_params, as_params=False):
param_shapes = [p.shape for p in model.dnn.parameters()]
start = 0
for name, p, new_p, shape in zip(names, orig_params, new_params, param_shapes):
numel = int(torch.prod(torch.tensor(shape)))
set_attr(model.dnn, name.split("."), torch.nn.Parameter(new_params[start:start + numel].view(shape)))
start += numel
def func(param_list):
load_weights(self.model, names, org_param, param_list, 1)
result = self.eq_cons(param_list)
result.requires_grad_()
return result
jac_mtx = torch.autograd.functional.jacobian(func, param_list, strict=1)
Код: Выделить всё
RuntimeError: Output 0 of the user-provided function is independent of input 0. This is not allowed in strict mode.
for index in range(len(output)):
self.model.dnn.zero_grad()
item = output[index]
item.backward()
for p in self.model.dnn.parameters():
param_grad = p.grad.detach().data
< /code>
Я смущен этой ошибкой, потому что выходной сигнал Func изменяется при вводе, и я понятия не имею, как ее решить. Почему происходит эта ошибка? Как я могу изменить свой код для правильного вычисления якобиана?
Подробнее здесь: https://stackoverflow.com/questions/796 ... -all-zeros