Нейросети 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 шт):

Автор решения: Roman Malashin

loss.requres_grad = True

Как минимум эта строчка точно не нужна (тем более здесь опечатка).

nn.eval

а) Плохое название для нейронной сети, т.к. в pytorch есть nn пакет (можно перепутать или нарваться на конфликт, если импортировать неудачно). б) Прямой проход сети вызывается методом forward, который вызовется при обращении к экземпляру сети напрямую: nn(X) #если оставить старые названия

Могут быть и другие проблемы, но это то, что сразу видно из того кода, что приведен.

→ Ссылка