Torch.no_grad'ın pitorch'ta kullanımı nedir?


22

Ben pitorch yeni ve bu github kodu ile başladı . Kodda 60-61 satırındaki yorumu anlamıyorum "because weights have requires_grad=True, but we don't need to track this in autograd". requires_grad=TrueAutograd'ı kullanmak için degradeleri hesaplamamız gereken değişkenlerden bahsettiğimizi anladım, ancak bunun anlamı "tracked by autograd"nedir?

Yanıtlar:


25

"With torch.no_grad ()" sarmalayıcısı geçici olarak tüm requir_grad bayrağını false olarak ayarlar. Resmi PyTorch öğreticisinden bir örnek ( 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)

Dışarı:

True
True
False

Yukarıdaki web sitesinden tüm dersleri okumanızı tavsiye ederim.

Örneğinizde: Yazar, sadece değerlerini güncellemek istediği için PyTorch'un yeni tanımlanmış w1 ve w2 değişkenlerinin gradyanlarını hesaplamasını istemiyor.


6
with torch.no_grad()

bloktaki tüm işlemlerin hiç degradesi olmayacak.

Pytorch'ta, iki değişken olan w1 ve w2'nin yer değiştirmesini değiştiremezsiniz require_grad = True. W1 ve w2'nin yer değiştirmesinden kaçınmanın, geri yayılma hesaplamasında hataya neden olacağı için olduğunu düşünüyorum. Yer değiştirme değişikliği w1 ve w2'yi tamamen değiştireceğinden.

Ancak, bunu kullanırsanız no_grad(), yeni w1 ve yeni w2'nin degradeleri yoktur, çünkü işlemler tarafından üretilirler, bu da gradyan parçasını değil yalnızca w1 ve w2 değerini değiştirdiğiniz anlamına gelir, yine de önceden tanımlanmış değişken gradyan bilgisine sahip olurlar. ve geri yayılım devam edebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.