Нейросети pytorch backpropagation
Совсем совсем только начинаю изучать pytorch и извиняюсь за несамостоятельность.
Вот так выглядит итерация обучения:
X = data[idx]
y = labels[idx]
nn = Model(weights, bias)
print('x:', X)
out = nn.eval(*X)
loss = (out-y).pow(2)
loss.requres_grad = True
total_loss += loss.item()
# backpropagation
loss.backward() # Ошибка возникает тут.
with torch.no_grad():
weights -= eta * weights.grad
bias -= eta * bias.grad
# reset gradient to zero
weights.grad.zero_()
bias.grad.zero_()
Получаю следующую ошибку:
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
Model в данном случае класс, который туда-сюда перекидывает данные и считает результат. Как я понимаю ошибка в том, что torch не может отследить путь весов. *В Model при переводе весов обратно в тип Tensor, require_grad не использовался. Буду так же рад ссылкам на гайды с разбором этой темы.
Ответы (1 шт):
loss.requres_grad = True
Как минимум эта строчка точно не нужна (тем более здесь опечатка).
nn.eval
а) Плохое название для нейронной сети, т.к. в pytorch есть nn пакет (можно перепутать или нарваться на конфликт, если импортировать неудачно). б) Прямой проход сети вызывается методом forward, который вызовется при обращении к экземпляру сети напрямую: nn(X) #если оставить старые названия
Могут быть и другие проблемы, но это то, что сразу видно из того кода, что приведен.