পাইটর্চে টর্চ.নো_গ্রাডের ব্যবহার কী?


21

আমি 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"?

উত্তর:


24

"টর্চ.নো_গ্রাড ()" সহ মোড়ক অস্থায়ীভাবে সমস্ত প্রয়োজনীয়_গ্র্যাড পতাকাটিকে মিথ্যা হিসাবে সেট করে। অফিসিয়াল পাইটর্চ টিউটোরিয়াল থেকে একটি উদাহরণ ( https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#gradient ):

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

উপরের ওয়েবসাইট থেকে সমস্ত টিউটোরিয়াল পড়ার পরামর্শ দিচ্ছি।

আপনার উদাহরণে: আমি অনুমান করি যে লেখক পাইটর্চকে নতুন সংজ্ঞায়িত ভেরিয়েবল ডাব্লু 1 এবং ডাব্লু 2 এর গ্রেডিয়েন্টগুলি গণনা করতে চান না কারণ তিনি কেবল তাদের মানগুলি আপডেট করতে চান।


6
with torch.no_grad()

ব্লকের সমস্ত ক্রিয়াকলাপের কোনও গ্রেডিয়েন্ট থাকবে না।

পাইটরঞ্চে, আপনি ডাব্লু 1 এবং ডাব্লু 2 এর অন্তর্নিহিত পরিবর্তন করতে পারবেন না, যা দুটি ভেরিয়েবলের সাথে হয় require_grad = True। আমি মনে করি যে ডাব্লু 1 এবং ডাব্লু 2 এর অন্তর্ভুক্তি পরিবর্তন এড়ানো কারণ এটি পিছনের প্রচারের গণনায় ত্রুটি ঘটবে। যেহেতু স্থান পরিবর্তনটি পুরোপুরি ডাব্লু 1 এবং ডাব্লু 2 পরিবর্তন করবে।

তবে আপনি যদি এটি ব্যবহার করেন no_grad()তবে নতুন ডাব্লু 1 এবং নতুন ডাব্লু 2 এর কোনও গ্রেডিয়েন্ট নেই যেহেতু সেগুলি ক্রিয়াকলাপ দ্বারা উত্পাদিত হয়েছে, যার অর্থ আপনি কেবলমাত্র ডাব্লু 1 এবং ডাব্লু 2 এর মান পরিবর্তন করেন, গ্রেডিয়েন্ট অংশ নয়, তাদের এখনও পূর্ববর্তী সংজ্ঞায়িত ভেরিয়েবল গ্রেডিয়েন্ট তথ্য রয়েছে এবং পিছনে প্রচার চালিয়ে যেতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.