zero_grad()
প্রশিক্ষণের সময় পদ্ধতিটি কল করা প্রয়োজন। তবে ডকুমেন্টেশন খুব বেশি সহায়ক নয়
| zero_grad(self)
| Sets gradients of all model parameters to zero.
আমাদের কেন এই পদ্ধতিটি কল করার দরকার আছে?
zero_grad()
প্রশিক্ষণের সময় পদ্ধতিটি কল করা প্রয়োজন। তবে ডকুমেন্টেশন খুব বেশি সহায়ক নয়
| zero_grad(self)
| Sets gradients of all model parameters to zero.
আমাদের কেন এই পদ্ধতিটি কল করার দরকার আছে?
উত্তর:
ইন PyTorch
, ব্যাকপ্রপ্রেগেশন শুরু করার আগে আমাদের গ্রেডিয়েন্টগুলি শূন্যে সেট করতে হবে কারণ পাইটর্চ পরবর্তী পশ্চাদপদ পাসগুলিতে গ্রেডিয়েন্টগুলি জমা করে । আরএনএন প্রশিক্ষণ নেওয়ার সময় এটি সুবিধাজনক। সুতরাং, ডিফল্ট ক্রিয়াটি হ'ল প্রতিটি কলে গ্রেডিয়েন্টগুলি জমা করা (অর্থাত্ যোগফল)loss.backward()
।
এ কারণে, আপনি যখন আপনার প্রশিক্ষণ লুপটি শুরু করেন, আদর্শভাবে আপনার উচিত zero out the gradients
যাতে আপনি সঠিকভাবে প্যারামিটার আপডেটটি করেন। অন্য গ্রেডিয়েন্টটি ন্যূনতম (বা সর্বাধিক , উদ্দেশ্য সর্বাধিকের ক্ষেত্রে) এর দিকে লক্ষ্যযুক্ত দিক ব্যতীত অন্য কোনও দিকে নির্দেশ করবে ।
এখানে একটি সহজ উদাহরণ:
import torch
from torch.autograd import Variable
import torch.optim as optim
def linear_model(x, W, b):
return torch.matmul(x, W) + b
data, targets = ...
W = Variable(torch.randn(4, 3), requires_grad=True)
b = Variable(torch.randn(3), requires_grad=True)
optimizer = optim.Adam([W, b])
for sample, target in zip(data, targets):
# clear out the gradients of all Variables
# in this optimizer (i.e. W, b)
optimizer.zero_grad()
output = linear_model(sample, W, b)
loss = (output - target) ** 2
loss.backward()
optimizer.step()
বিকল্পভাবে, আপনি যদি ভ্যানিলা গ্রেডিয়েন্ট বংশোদ্ভূত করছেন , তবে:
W = Variable(torch.randn(4, 3), requires_grad=True)
b = Variable(torch.randn(3), requires_grad=True)
for sample, target in zip(data, targets):
# clear out the gradients of Variables
# (i.e. W, b)
W.grad.data.zero_()
b.grad.data.zero_()
output = linear_model(sample, W, b)
loss = (output - target) ** 2
loss.backward()
W -= learning_rate * W.grad.data
b -= learning_rate * b.grad.data
দ্রষ্টব্য : গ্রেডিয়েন্টগুলির সঞ্চিতি (অর্থাত্ যোগফল ) যখন টেনসারে .backward()
ডাকা হয়loss
।
আপনি যদি ত্রুটি (বা ক্ষয়) হ্রাসের জন্য গ্রেডিয়েন্ট পদ্ধতি ব্যবহার করেন তবে শূন্য_গ্রাড () শেষ ধাপের ক্ষতি ছাড়াই লুপিং পুনরায় চালু করবে you
আপনি যদি শূন্য_গ্রাড () ব্যবহার না করেন তবে ক্ষতির পরিমাণ হ্রাস হবে প্রয়োজনীয় হিসাবে বৃদ্ধি পাবে না
উদাহরণস্বরূপ আপনি যদি শূন্য_গ্রাড () ব্যবহার করেন তবে আপনি নিম্নলিখিত আউটপুটটি দেখতে পাবেন:
model training loss is 1.5
model training loss is 1.4
model training loss is 1.3
model training loss is 1.2
আপনি যদি শূন্য_গ্রাড () ব্যবহার না করেন তবে নীচের আউটপুটটি পাবেন:
model training loss is 1.4
model training loss is 1.9
model training loss is 2
model training loss is 2.8
model training loss is 3.5