Skill

মডেল ট্রেনিং এবং ভ্যালিডেশন

Latest Technologies - টর্চ (Torch)
60
60

মডেল ট্রেনিং এবং ভ্যালিডেশন মেশিন লার্নিং মডেল তৈরির একটি গুরুত্বপূর্ণ ধাপ। মডেল ট্রেনিংয়ের সময় ডেটা ব্যবহার করে মডেল শেখানো হয় এবং ভ্যালিডেশনের মাধ্যমে যাচাই করা হয় যে মডেলটি কেমন পারফর্ম করছে। এটি নিশ্চিত করে যে মডেলটি প্রশিক্ষণ ডেটায় ওভারফিট না করে জেনারেলাইজ করতে পারে। PyTorch ব্যবহার করে মডেল ট্রেনিং এবং ভ্যালিডেশন করার ধাপগুলি নিচে দেওয়া হল:

ধাপ ১: ডেটাসেট প্রস্তুত করা

প্রথমে ডেটাসেট প্রস্তুত করতে হবে এবং এটিকে ট্রেনিং এবং ভ্যালিডেশন সেটে ভাগ করতে হবে। PyTorch-এর DataLoader ক্লাস ব্যবহার করে ডেটাসেট লোড করা যায়।

import torch
from torch.utils.data import DataLoader, TensorDataset

# উদাহরণ ডেটাসেট
X_train = torch.tensor([[1.0], [2.0], [3.0], [4.0], [5.0], [6.0]])
Y_train = torch.tensor([[2.0], [4.0], [6.0], [8.0], [10.0], [12.0]])

X_val = torch.tensor([[7.0], [8.0]])
Y_val = torch.tensor([[14.0], [16.0]])

# ট্রেন এবং ভ্যালিডেশন ডেটাসেট তৈরি করা
train_dataset = TensorDataset(X_train, Y_train)
val_dataset = TensorDataset(X_val, Y_val)

# ডেটালোডার তৈরি করা
train_loader = DataLoader(train_dataset, batch_size=2, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=2)

ধাপ ২: মডেল তৈরি করা

আমরা একটি সাধারণ লিনিয়ার মডেল তৈরি করব।

import torch.nn as nn

class SimpleLinearModel(nn.Module):
    def __init__(self):
        super(SimpleLinearModel, self).__init__()
        self.linear = nn.Linear(1, 1)

    def forward(self, x):
        return self.linear(x)

model = SimpleLinearModel()

ধাপ ৩: লস ফাংশন এবং অপটিমাইজার সেট করা

import torch.optim as optim

criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

ধাপ ৪: ট্রেনিং এবং ভ্যালিডেশন লুপ তৈরি করা

মডেল ট্রেনিংয়ের জন্য, প্রতিটি এপোকে আমরা ট্রেনিং ডেটা ব্যবহার করে মডেল আপডেট করি এবং ভ্যালিডেশন ডেটা ব্যবহার করে মডেলের পারফরম্যান্স যাচাই করি।

# মডেল ট্রেনিং এবং ভ্যালিডেশন ফাংশন
def train(model, train_loader, criterion, optimizer):
    model.train()  # ট্রেনিং মোডে মডেল সেট করা
    running_loss = 0.0
    for inputs, targets in train_loader:
        optimizer.zero_grad()        # গ্রেডিয়েন্ট রিসেট
        outputs = model(inputs)      # ফরোয়ার্ড পাস
        loss = criterion(outputs, targets)  # লস ক্যালকুলেশন
        loss.backward()             # ব্যাকপ্রোপাগেশন
        optimizer.step()            # ওয়েট আপডেট
        running_loss += loss.item()
    return running_loss / len(train_loader)

def validate(model, val_loader, criterion):
    model.eval()  # ভ্যালিডেশন মোডে মডেল সেট করা
    val_loss = 0.0
    with torch.no_grad():  # গ্রেডিয়েন্ট ক্যালকুলেশন বন্ধ
        for inputs, targets in val_loader:
            outputs = model(inputs)
            loss = criterion(outputs, targets)
            val_loss += loss.item()
    return val_loss / len(val_loader)

# মডেল প্রশিক্ষণ এবং ভ্যালিডেশন
epochs = 100
for epoch in range(epochs):
    train_loss = train(model, train_loader, criterion, optimizer)
    val_loss = validate(model, val_loader, criterion)
    
    if (epoch + 1) % 10 == 0:
        print(f'Epoch {epoch+1}/{epochs}, Train Loss: {train_loss:.4f}, Val Loss: {val_loss:.4f}')

ধাপ ৫: মডেল মূল্যায়ন এবং ফলাফল বিশ্লেষণ

প্রতি এপোকে মডেলের ট্রেনিং এবং ভ্যালিডেশন লস প্রিন্ট করা হয়। এইভাবে আমরা ট্রেনিং প্রক্রিয়ার সময় লস কমানো হচ্ছে কিনা এবং ভ্যালিডেশন লস কেমন আসছে তা যাচাই করতে পারি।

সারসংক্ষেপ

  • Train Loop: মডেল শেখানোর জন্য ব্যাকপ্রোপাগেশন এবং অপটিমাইজেশন প্রক্রিয়া ব্যবহার করে।
  • Validation Loop: মডেল ট্রেনিংয়ের সময় পরিমাপ করে মডেলটি ওভারফিট করছে কিনা এবং এটি কিভাবে জেনারেলাইজ করছে।

ওভারফিটিং এবং আন্ডারফিটিং

  • ওভারফিটিং: যদি ভ্যালিডেশন লস ট্রেনিং লস থেকে বেশি হয় এবং ট্রেনিং লস অনেক কম থাকে, তবে মডেল ওভারফিট করছে। এতে মডেল প্রশিক্ষণ ডেটার উপর খুব নির্ভরশীল হয়ে যায় এবং নতুন ডেটার জন্য ভালো কাজ করে না।
  • আন্ডারফিটিং: যদি ট্রেনিং লস এবং ভ্যালিডেশন লস দুটোই অনেক বেশি থাকে, তবে মডেল যথেষ্ট শিখছে না।

মডেলের পারফরম্যান্স উন্নত করার উপায়

  • লার্নিং রেট অ্যাডজাস্ট: অপ্টিমাইজারের লার্নিং রেট পরিবর্তন করে।
  • অ্যাডভান্সড অপটিমাইজার: যেমন Adam বা RMSprop ব্যবহার করা।
  • Regulization: ড্রপআউট বা ওয়েট ডিকেয় ব্যবহার করে ওভারফিটিং প্রতিরোধ করা।

এভাবে, PyTorch-এ মডেল ট্রেনিং এবং ভ্যালিডেশন প্রক্রিয়া মডেলের পারফরম্যান্স নিশ্চিত করতে অত্যন্ত গুরুত্বপূর্ণ।

মডেল ট্রেনিং এর ধাপসমূহ এবং Dataset তৈরির পদ্ধতি

81
81

মডেল ট্রেনিং এবং ডেটাসেট তৈরির ধাপসমূহ মেশিন লার্নিং এবং ডিপ লার্নিং প্রজেক্টের একটি গুরুত্বপূর্ণ অংশ। সঠিকভাবে ডেটাসেট তৈরি করা এবং মডেল ট্রেনিং করার মাধ্যমে মডেলটি সঠিক ফলাফল দিতে পারে। নিচে ধাপগুলো আলোচনা করা হলো:

১. ডেটাসেট তৈরি করার পদ্ধতি

ডেটাসেট তৈরি করার প্রথম ধাপ হলো প্রয়োজনীয় ডেটা সংগ্রহ করা এবং সেটি প্রক্রিয়াজাত করা। ডেটাসেট তৈরি করার কয়েকটি সাধারণ ধাপ:

ডেটা সংগ্রহ (Data Collection):

  • আপনি ডেটা সংগ্রহ করতে পারেন বিভিন্ন উত্স থেকে, যেমন: ডেটাবেস, API, ওয়েব স্ক্র্যাপিং, সেন্সর ডেটা, বা পাবলিক ডেটাসেট (যেমন Kaggle)।

ডেটা পরিস্কার করা (Data Cleaning):

  • ডেটাসেটের মধ্যে কোনো Missing Values থাকলে সেগুলি পূরণ করতে হবে বা অপসারণ করতে হবে।
  • Outliers বা অস্বাভাবিক ডেটা চিহ্নিত করে অপসারণ বা সংশোধন করতে হবে।
  • ডুপ্লিকেট ডেটা বা ভুল লেবেল থাকলে তা সংশোধন করা।

ডেটা ট্রান্সফরমেশন (Data Transformation):

  • ক্যাটেগরিকাল ডেটাকে এনকোড করা (যেমন One-Hot Encoding)।
  • সংখ্যাসূচক ডেটা স্কেলিং বা স্ট্যান্ডার্ডাইজেশন করা (যেমন Min-Max Scaling বা Standard Scaler)।
  • টেক্সট ডেটার ক্ষেত্রে টোকেনাইজেশন এবং শব্দ এম্বেডিং ব্যবহার করা।

ডেটাসেট ভাগ করা (Data Splitting):

  • সাধারণত ডেটাসেটকে তিন ভাগে ভাগ করা হয়:
    • Training Set: মডেল শেখানোর জন্য ব্যবহৃত হয়, সাধারণত ৬০-৮০%।
    • Validation Set: হাইপারপ্যারামিটার টিউনিং এবং মডেলের পারফরম্যান্স যাচাইয়ের জন্য ব্যবহৃত হয়, সাধারণত ১০-২০%।
    • Test Set: মডেলের চূড়ান্ত মূল্যায়নের জন্য ব্যবহৃত হয়, সাধারণত ১০-২০%।

২. মডেল ট্রেনিং এর ধাপসমূহ

মডেল ট্রেনিং একটি গুরুত্বপূর্ণ এবং পদ্ধতিগত প্রক্রিয়া। মডেল ট্রেনিংয়ের ধাপসমূহ নিচে দেওয়া হলো:

ডেটাসেট লোড করা:

  • ডেটাসেট প্রস্তুত হয়ে গেলে সেটি মডেলে লোড করতে হবে, যা PyTorch বা TensorFlow এর DataLoader ব্যবহার করে করা যায়।

মডেল ডিজাইন করা:

  • মডেলের আর্কিটেকচার (Layer সংখ্যা, Activation Function, Dropout ইত্যাদি) নির্ধারণ করতে হবে।
  • PyTorch এ এটি একটি nn.Module ক্লাস তৈরি করে ডিজাইন করা যায়।

লস ফাংশন নির্বাচন করা:

  • মডেল কতটা সঠিক ফলাফল দিচ্ছে তা পরিমাপ করার জন্য একটি লস ফাংশন নির্ধারণ করতে হয়। উদাহরণ:
    • ক্লাসিফিকেশনের জন্য: CrossEntropyLoss।
    • রিগ্রেশনের জন্য: Mean Squared Error (MSE)।

অপ্টিমাইজার নির্বাচন করা:

  • মডেলের ওজন আপডেট করার জন্য একটি অপ্টিমাইজার নির্বাচন করতে হয়। উদাহরণ:
    • SGD, Adam, RMSprop ইত্যাদি।

ট্রেনিং লুপ তৈরি করা:

  • ট্রেনিং লুপ হলো এমন একটি প্রক্রিয়া, যেখানে প্রতিটি ইপক (Epoch) এ ইনপুট ডেটা মডেলে প্রয়োগ করা হয়, লস গণনা করা হয় এবং ব্যাকপ্রোপাগেশনের মাধ্যমে ওজন আপডেট করা হয়। ট্রেনিং লুপের সাধারণ ধাপগুলো:
    • ইনপুট এবং টার্গেট ভ্যালু মডেলে লোড করা।
    • মডেল আউটপুট বের করা।
    • লস ফাংশন দিয়ে লস গণনা করা।
    • optimizer.zero_grad() দিয়ে পূর্ববর্তী গ্রেডিয়েন্ট রিসেট করা।
    • loss.backward() দিয়ে ব্যাকপ্রোপাগেশন করা।
    • optimizer.step() দিয়ে ওজন আপডেট করা।

ভ্যালিডেশন ও টেস্টিং:

  • প্রতিটি ইপকের শেষে বা ট্রেনিং শেষে মডেলের পারফরম্যান্স যাচাই করতে ভ্যালিডেশন ডেটা ব্যবহার করা হয়।
  • চূড়ান্ত মূল্যায়নের জন্য টেস্ট ডেটাসেট ব্যবহার করা হয়।

হাইপারপ্যারামিটার টিউনিং:

  • মডেলের লার্নিং রেট, লেয়ার সংখ্যা, অ্যাক্টিভেশন ফাংশন ইত্যাদি হাইপারপ্যারামিটার টিউন করে মডেলের পারফরম্যান্স উন্নত করা যায়।

মডেল সংরক্ষণ:

  • ট্রেনিং শেষে মডেল সংরক্ষণ করা হয়, যাতে এটি পুনরায় ব্যবহার করা যায়।
  • PyTorch এ এটি করা যায়:
torch.save(model.state_dict(), 'model.pth')

৩. মডেল টেস্টিং ও মূল্যায়ন

মডেল ট্রেনিং শেষ হলে, মডেলটি টেস্টিং ডেটাসেটে মূল্যায়ন করা হয়। এ সময় বিভিন্ন মেট্রিক্স (যেমন Accuracy, Precision, Recall, F1-score) ব্যবহার করে মডেলের পারফরম্যান্স মূল্যায়ন করা হয়।

এই ধাপগুলির মাধ্যমে একটি পূর্ণাঙ্গ মডেল ট্রেনিং এবং ডেটাসেট প্রস্তুতির প্রক্রিয়া সম্পন্ন করা যায়।

DataLoader ব্যবহার করে ডেটা লোড করা

88
88

PyTorch-এ DataLoader ব্যবহার করে ডেটা লোড করা হয়, যা ডেটাকে ব্যাচে ভাগ করে এবং ট্রেনিং বা ভ্যালিডেশন সেটে ডেটা শাফল করে। এটি ডেটা লোডিং এবং প্রিপ্রসেসিং সহজ করে। নিচে একটি উদাহরণ দেওয়া হল যেখানে torchvision.datasets এবং DataLoader ব্যবহার করে ডেটা লোড করা হয়েছে।

উদাহরণ: MNIST ডেটাসেট লোড করা

import torch
from torch.utils.data import DataLoader
import torchvision.transforms as transforms
from torchvision.datasets import MNIST

# ডেটা ট্রান্সফর্মেশন ডিফাইন করা
transform = transforms.Compose([
    transforms.ToTensor(),  # ইমেজকে টেন্সরে কনভার্ট করা
    transforms.Normalize((0.5,), (0.5,))  # নরমালাইজেশন (mean=0.5, std=0.5)
])

# ট্রেনিং এবং টেস্ট ডেটাসেট লোড করা
train_dataset = MNIST(root='./data', train=True, transform=transform, download=True)
test_dataset = MNIST(root='./data', train=False, transform=transform, download=True)

# DataLoader তৈরি করা
train_loader = DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

# ট্রেনিং ডেটার একটি ব্যাচ চেক করা
data_iter = iter(train_loader)
images, labels = next(data_iter)

print(f"Batch size: {images.size()}")
print(f"Labels: {labels}")

ব্যাখ্যা:

transforms.Compose:

  • ডেটাকে প্রসেস বা ট্রান্সফর্ম করার জন্য এটি ব্যবহার করা হয়। এখানে,
    • transforms.ToTensor(): ইমেজকে PyTorch টেন্সরে কনভার্ট করে।
    • transforms.Normalize((0.5,), (0.5,)): ইমেজ পিক্সেল ভ্যালুকে নরমালাইজ করে (mean = 0.5, std = 0.5)।

ডেটাসেট লোড করা:

  • MNIST ডেটাসেট ডাউনলোড এবং লোড করার জন্য torchvision.datasets ব্যবহার করা হয়েছে।
  • train=True হলে ট্রেনিং ডেটাসেট লোড হয়, এবং train=False হলে টেস্ট ডেটাসেট।

DataLoader তৈরি করা:

  • DataLoader PyTorch এর একটি ইম্পরট্যান্ট ফাংশন, যা ডেটাসেট থেকে ব্যাচ তৈরি করে। এখানে:
    • batch_size=64 দ্বারা প্রতিটি ব্যাচে ৬৪টি ইমেজ রাখা হয়েছে।
    • shuffle=True দিয়ে ট্রেনিং ডেটাসেট শাফল করা হয়েছে যাতে প্রতিটি এপকে ডেটা মিক্সড থাকে।

ডেটা দেখা:

  • iter(train_loader) দিয়ে ডেটার একটি ইটারেটর তৈরি করা হয়েছে এবং next() ফাংশন দিয়ে একটি ব্যাচ এক্সট্রাক্ট করা হয়েছে।
  • images এবং labels ভেরিয়েবলগুলোতে ইমেজ এবং তাদের লেবেলগুলো স্টোর করা হয়েছে।

সুবিধা:

  • DataLoader ব্যাচ প্রসেসিং, শাফলিং, এবং প্যারালাল ডেটা লোডিং সহজ করে, যা মডেল ট্রেনিংকে দ্রুত এবং ইফিশিয়েন্ট করে তোলে।

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

71
71

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 তৈরি করা হয় এবং মডেল ট্রেনিং এবং মূল্যায়ন করা হয়।

উদাহরণসহ মডেল ট্রেনিং এবং ভ্যালিডেশন

58
58

মডেল ট্রেনিং এবং ভ্যালিডেশন করার জন্য PyTorch-এ আমরা কিছু নির্দিষ্ট ধাপ অনুসরণ করি। এই প্রক্রিয়ায়, আমরা একটি Neural Network মডেল তৈরি করে তা ট্রেন করি এবং ভ্যালিডেশন ডেটাসেটে পরীক্ষা করি, যাতে মডেলের পারফরমেন্স যাচাই করা যায়। নিচে উদাহরণসহ বর্ণনা করা হয়েছে।

ধাপ ১: প্যাকেজ ইমপোর্ট করা

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader, random_split

ধাপ ২: ডেটা লোড এবং স্প্লিট করা

আমরা MNIST ডাটাসেট ব্যবহার করবো এবং ট্রেনিং এবং ভ্যালিডেশন ডেটাসেটে বিভক্ত করবো।

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

# ডেটাসেট ডাউনলোড এবং লোড করা
dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transform, download=True)

# ডেটাসেট স্প্লিট করা
train_size = int(0.8 * len(dataset))
val_size = len(dataset) - train_size
train_dataset, val_dataset = random_split(dataset, [train_size, val_size])

train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=64, shuffle=False)

ধাপ ৩: মডেল তৈরি করা

class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(28 * 28, 128)
        self.fc2 = nn.Linear(128, 64)
        self.fc3 = nn.Linear(64, 10)

    def forward(self, x):
        x = x.view(-1, 28 * 28)  # ইনপুট ফ্ল্যাট করা
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)
        return x

model = SimpleNN()

ধাপ ৪: লস ফাংশন এবং অপ্টিমাইজার সেট করা

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

ধাপ ৫: ট্রেনিং ফাংশন তৈরি করা

def train_model(model, train_loader, criterion, optimizer):
    model.train()  # মডেলকে ট্রেনিং মোডে সেট করা
    running_loss = 0.0
    
    for images, labels in train_loader:
        # ফোরওয়ার্ড পাস
        outputs = model(images)
        loss = criterion(outputs, labels)
        
        # ব্যাকওয়ার্ড পাস এবং অপ্টিমাইজেশন
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item()
    
    return running_loss / len(train_loader)

ধাপ ৬: ভ্যালিডেশন ফাংশন তৈরি করা

def validate_model(model, val_loader, criterion):
    model.eval()  # মডেলকে ইভালুয়েশন মোডে সেট করা
    val_loss = 0.0
    correct = 0
    total = 0
    
    with torch.no_grad():  # গ্রেডিয়েন্ট ক্যালকুলেশন বন্ধ করা
        for images, labels in val_loader:
            outputs = model(images)
            loss = criterion(outputs, labels)
            val_loss += loss.item()
            
            # প্রেডিকশন বের করা
            _, predicted = torch.max(outputs, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    
    accuracy = 100 * correct / total
    return val_loss / len(val_loader), accuracy

ধাপ ৭: মডেল ট্রেনিং এবং ভ্যালিডেশন চালানো

num_epochs = 5

for epoch in range(num_epochs):
    train_loss = train_model(model, train_loader, criterion, optimizer)
    val_loss, val_accuracy = validate_model(model, val_loader, criterion)
    
    print(f'Epoch [{epoch+1}/{num_epochs}], Train Loss: {train_loss:.4f}, Validation Loss: {val_loss:.4f}, Validation Accuracy: {val_accuracy:.2f}%')

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

  1. ডেটা স্প্লিট করা: ডেটাসেটকে ৮০% ট্রেনিং এবং ২০% ভ্যালিডেশন ডেটাসেটে ভাগ করা হয়েছে।
  2. মডেল তৈরি: একটি বেসিক Neural Network মডেল তৈরি করা হয়েছে।
  3. ট্রেনিং ফাংশন: train_model ফাংশন ট্রেনিং ডেটার উপর মডেল ট্রেন করে এবং গড় ট্রেনিং লস রিটার্ন করে।
  4. ভ্যালিডেশন ফাংশন: validate_model ফাংশন ভ্যালিডেশন ডেটাসেটে মডেল পরীক্ষা করে এবং লস ও এক্যুরেসি রিটার্ন করে।
  5. মডেল ট্রেনিং এবং ভ্যালিডেশন: প্রতিটি এপকে ট্রেনিং এবং ভ্যালিডেশন লস ও এক্যুরেসি প্রিন্ট করা হয়েছে।

ধাপ ৮: মডেল সেভ করা

মডেল ট্রেনিং শেষে মডেল সংরক্ষণ করা যেতে পারে:

torch.save(model.state_dict(), 'simple_nn_model.pth')

ধাপ ৯: মডেল লোড করা

পরবর্তীতে, মডেল লোড করতে:

model = SimpleNN()
model.load_state_dict(torch.load('simple_nn_model.pth'))
model.eval()  # ইভালুয়েশন মোডে সেট করা

এভাবে আপনি PyTorch-এ মডেল ট্রেনিং এবং ভ্যালিডেশন প্রক্রিয়া সম্পূর্ণ করতে পারেন। এই ধাপগুলো অনুসরণ করলে আপনি আপনার মডেল তৈরি করে তা সঠিকভাবে ট্রেন এবং ভ্যালিডেট করতে পারবেন।

টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion