Torch.autograd.functional.jacobian возвращает тензоры со всеми нулямиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Torch.autograd.functional.jacobian возвращает тензоры со всеми нулями

Сообщение Anonymous »

Я пытаюсь использовать Torch.autograd.functional.jacobian для расчета градиентов параметров модели в отношении набора потерь, но он возвращает все нули. Моя функция определение следующего < /p>
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)
< /code>
Функция eq_cons обновляет модель, используя пропущенные параметры, предсказывают результат некоторых учебных данных, вычисляет серию потерь и объединяет их в массив с формой, соответствующей конкретным данным. Когда я изменяю param_list, видно, что возвращаемое значение EQ_CONS и функцию func оба изменения. Когда я устанавливаю строгое = 1, это повышает ошибку: < /p>
RuntimeError: Output 0 of the user-provided function is independent of input 0. This is not allowed in strict mode.
< /code>
Чтобы решить эту проблему, я проверяю model.parameters () в конце функции load_weights, и я уверен, что параметры обновляются. Кроме того, я попытался разделить выход, вызовать обратно в цикл и использовал следующий код для расчета градиентов отдельно. Однако он вернул один и тот же результат для разных терминов в выходе. < /P>
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Torch.autograd.functional.jacobian возвращает тензоры со всеми нулями
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Есть ли более быстрая и экономичная по памяти альтернатива torch.autograd.functional.jacobian(model.decoder, latent_l)?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Почему вывод torch.nn.functional.linear отличается при умножении каждой строки?
    Anonymous » » в форуме Python
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Torch.nn.functional.softmax дает неточные выходные данные softmax
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Что такое ComputeType of torch.nn.functional.lineear, когда вход Float16 или Bfloat16
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»