Training Loop এবং Validation Loop তৈরি করা

মডেল ট্রেনিং এবং ভ্যালিডেশন - টর্চ (Torch) - Latest Technologies

299

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}')

কোডের ব্যাখ্যা:

  1. Model Initialization: SimpleNN ক্লাস দিয়ে মডেল তৈরি করা হয়েছে।
  2. Criterion এবং Optimizer: MSELoss এবং SGD optimizer ব্যবহার করা হয়েছে।
  3. Training Loop:
    • মডেলকে train() মোডে সেট করা।
    • ইনপুট ডেটা দিয়ে forward pass, loss calculation, এবং backward pass করা।
    • optimizer.step() দিয়ে মডেলের প্যারামিটার আপডেট করা।
  4. Validation Loop:
    • মডেলকে eval() মোডে সেট করা।
    • torch.no_grad() ব্লক ব্যবহার করা হয়েছে যাতে গ্রেডিয়েন্ট ক্যালকুলেশন বন্ধ থাকে।
    • Validation ডেটা দিয়ে forward pass এবং লস ক্যালকুলেট করা হয়েছে।
  5. প্রতিটি ১০ এপকের পর ট্রেনিং এবং validation লস প্রিন্ট করা হয়েছে।

গুরুত্বপূর্ণ টিপস:

  • Model.train(): মডেলকে ট্রেনিং মোডে সেট করে, যা Dropout এবং BatchNorm-এর মতো লেয়ারগুলোকে তাদের ট্রেনিং বিহেভিয়ার সেট করে।
  • Model.eval(): মডেলকে ইভ্যালুয়েশন মোডে সেট করে যাতে মডেল ট্রেনিং বিহেভিয়ার না দেখায় (যেমন: Dropout লেয়ারগুলো ডিসেবল করা হয়)।
  • torch.no_grad(): মেমোরি অপটিমাইজেশন এবং স্পিড বৃদ্ধির জন্য validation সময়ে গ্রেডিয়েন্ট ক্যালকুলেট না করার জন্য ব্যবহৃত হয়।

এভাবে PyTorch-এ Training এবং Validation Loop তৈরি করা হয় এবং মডেল ট্রেনিং এবং মূল্যায়ন করা হয়।

Promotion

Are you sure to start over?

Loading...