Как нейронные сети, потери и оптимизатор связаны в PyTorch? - PullRequest
1 голос
/ 19 февраля 2020

Я видел ответы на этот вопрос , но я до сих пор не понимаю его вообще. Насколько я знаю, это самая базовая c настройка:

net = CustomClassInheritingFromModuleWithDefinedInitAndForward()
criterion = nn.SomeLossClass()
optimizer = optim.SomeOptimizer(net.parameters(), ...)
for _, data in enumerate(trainloader, 0):
    inputs, labels = data
    optimizer.zero_grad()
    outputs = net(inputs)
    loss = criterion(outputs, labels)
    loss.backward()
    optimizer.step()

Что я не понимаю, так это:

Оптимизатор инициализируется с помощью net .parameters () Я считал, что внутренние веса потери net.

не имеют доступа ни к этим параметрам, ни к самому net. Он имеет доступ только к выходам и меткам ввода net.

Оптимизатор также не имеет доступа к потерям.

Таким образом, если потеря работает только для выходов, а оптимизатор только для net .parameters как они могут быть связаны?

1 Ответ

0 голосов
/ 19 февраля 2020

Оптимизатор инициализируется с помощью net .parameters (), который, как я думал, является внутренним весом net.

Это связано с тем, что оптимизатор будет изменять параметры вашего net во время обучения.

Потеря не имеет доступа ни к этим параметрам, ни к самому net. Он имеет доступ только к выводам и меткам ввода net.

Потеря только вычисляет ошибку между предсказанием и правдой.

Оптимизатор не имеет доступа потеря либо.

Доступ к тензорам, которые были вычислены в течение loss.backward

...