PyTorch-এ মডেল Training Loop এবং Validation Loop তৈরি করার জন্য নিচে ধাপে ধাপে ব্যাখ্যা ও উদাহরণ দেওয়া হলো।
Training Loop
Training Loop হলো যেখানে মডেল ট্রেনিং ডেটা ব্যবহার করে তার প্যারামিটার আপডেট করে। এটি মডেল ট্রেনিং এর প্রধান অংশ যেখানে forward pass, loss calculation, backward pass, এবং optimizer step করা হয়।
Validation Loop
Validation Loop হলো যেখানে মডেল ট্রেনিংয়ের সময় validation ডেটাসেট দিয়ে মডেলের পারফর্ম্যান্স মূল্যায়ন করা হয়। এটি মডেলকে evaluate mode-এ সেট করে গ্রেডিয়েন্ট ছাড়াই লস এবং মেট্রিক্স হিসাব করে।
Training এবং Validation Loop উদাহরণ
import torch
import torch.nn as nn
import torch.optim as optim
# একটি সাধারণ নিউরাল নেটওয়ার্ক তৈরি
class SimpleNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SimpleNN, self).__init__()
self.hidden = nn.Linear(input_size, hidden_size)
self.output = nn.Linear(hidden_size, output_size)
def forward(self, x):
x = torch.relu(self.hidden(x))
x = self.output(x)
return x
# মডেল, লস ফাংশন এবং Optimizer ইনিশিয়ালাইজ করা
model = SimpleNN(input_size=2, hidden_size=5, output_size=1)
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# ট্রেনিং এবং ভ্যালিডেশন ডেটাসেট উদাহরণ
train_data = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]])
train_target = torch.tensor([[0.5], [1.5], [2.5], [3.5]])
val_data = torch.tensor([[1.5, 2.5], [3.5, 4.5]])
val_target = torch.tensor([[0.75], [1.75]])
# Training এবং Validation Loop
num_epochs = 50
for epoch in range(num_epochs):
# Training Loop
model.train() # মডেলকে ট্রেন মোডে সেট করা
optimizer.zero_grad() # গ্রেডিয়েন্ট রিসেট করা
train_output = model(train_data) # Forward Pass
train_loss = criterion(train_output, train_target) # Loss Calculation
train_loss.backward() # Backward Pass
optimizer.step() # Optimizer Step
# Validation Loop
model.eval() # মডেলকে ইভ্যালুয়েট মোডে সেট করা
with torch.no_grad(): # Validation-এর সময় গ্রেডিয়েন্ট ক্যালকুলেট না করা
val_output = model(val_data)
val_loss = criterion(val_output, val_target)
# প্রতিটি ১০ এপক পর পর ট্রেন এবং ভ্যালিডেশন লস প্রিন্ট করা
if (epoch + 1) % 10 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Train Loss: {train_loss.item():.4f}, Val Loss: {val_loss.item():.4f}')
কোডের ব্যাখ্যা:
- Model Initialization:
SimpleNNক্লাস দিয়ে মডেল তৈরি করা হয়েছে। - Criterion এবং Optimizer: MSELoss এবং SGD optimizer ব্যবহার করা হয়েছে।
- Training Loop:
- মডেলকে
train()মোডে সেট করা। - ইনপুট ডেটা দিয়ে forward pass, loss calculation, এবং backward pass করা।
optimizer.step()দিয়ে মডেলের প্যারামিটার আপডেট করা।
- মডেলকে
- Validation Loop:
- মডেলকে
eval()মোডে সেট করা। torch.no_grad()ব্লক ব্যবহার করা হয়েছে যাতে গ্রেডিয়েন্ট ক্যালকুলেশন বন্ধ থাকে।- Validation ডেটা দিয়ে forward pass এবং লস ক্যালকুলেট করা হয়েছে।
- মডেলকে
- প্রতিটি ১০ এপকের পর ট্রেনিং এবং validation লস প্রিন্ট করা হয়েছে।
গুরুত্বপূর্ণ টিপস:
- Model.train(): মডেলকে ট্রেনিং মোডে সেট করে, যা Dropout এবং BatchNorm-এর মতো লেয়ারগুলোকে তাদের ট্রেনিং বিহেভিয়ার সেট করে।
- Model.eval(): মডেলকে ইভ্যালুয়েশন মোডে সেট করে যাতে মডেল ট্রেনিং বিহেভিয়ার না দেখায় (যেমন: Dropout লেয়ারগুলো ডিসেবল করা হয়)।
- torch.no_grad(): মেমোরি অপটিমাইজেশন এবং স্পিড বৃদ্ধির জন্য validation সময়ে গ্রেডিয়েন্ট ক্যালকুলেট না করার জন্য ব্যবহৃত হয়।
এভাবে PyTorch-এ Training এবং Validation Loop তৈরি করা হয় এবং মডেল ট্রেনিং এবং মূল্যায়ন করা হয়।
Read more