У чому полягає використання torch.no_grad у pytorch?


22

Я новачок у pytorch і почав із цього коду github. Я не розумію коментар у рядку 60-61 у коді "because weights have requires_grad=True, but we don't need to track this in autograd". Я зрозумів, що ми згадуємо requires_grad=Trueпро змінні, які нам потрібні для обчислення градієнтів для використання автограду, але що це означає бути "tracked by autograd"?

Відповіді:


25

Обгортка "with torch.no_grad ()" тимчасово встановила весь прапор Requ_grad на false. Приклад з офіційного підручника PyTorch ( https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#gradients ):

x = torch.randn(3, requires_grad=True)
print(x.requires_grad)
print((x ** 2).requires_grad)

with torch.no_grad():
    print((x ** 2).requires_grad)

Вийшов:

True
True
False

Я рекомендую вам ознайомитися з усіма навчальними посібниками з веб-сайту, наведеного вище.

У вашому прикладі: я думаю, автор не хоче, щоб PyTorch обчислював градієнти нових визначених змінних w1 і w2, оскільки він просто хоче оновити їх значення.


6
with torch.no_grad()

зробить всі операції в блоці не градієнтами.

У pytorch, ви не можете змінити зміни в wcel і w2, що є двома змінними require_grad = True. Я думаю, що уникнути зміни зміни in1 заміни w1 і w2 є тому, що це призведе до помилок у підрахунку зворотного розповсюдження. Оскільки зміна розміщення повністю змінить w1 і w2.

Однак якщо ви використовуєте це no_grad(), ви можете керувати новим w1 і новим w2 не мати градієнтів, оскільки вони генеруються операціями, а значить, ви змінюєте лише значення w1 і w2, а не градієнтну частину, вони все ще мають попередньо визначену інформацію змінної градієнта і розмноження спини може продовжуватися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.