Skill

উদাহরণসহ একটি বেসিক Image Classification মডেল

Convolutional Neural Networks (CNN) - চেইনার (Chainer) - Latest Technologies

306

এখানে PyTorch ব্যবহার করে একটি বেসিক image classification মডেল তৈরি করা হয়েছে। মডেলটি একটি সাধারণ Convolutional Neural Network (CNN) যা MNIST ডেটাসেট (হাতে লেখা সংখ্যা) ব্যবহার করে 0 থেকে 9 পর্যন্ত সংখ্যাগুলো সনাক্ত করবে।

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

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms

ধাপ ২: ডেটাসেট লোড করা এবং ট্রান্সফরমেশন প্রয়োগ করা

MNIST ডেটাসেট grayscale (1 channel) ইমেজ নিয়ে গঠিত, যার প্রতিটি ইমেজের সাইজ 28x28। আমরা ToTensor() এবং Normalize() ব্যবহার করে ইমেজ গুলোকে টেনসর এবং normalized করব।

# ডেটা ট্রান্সফরমেশন
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

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

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

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

এখানে আমরা একটি বেসিক CNN মডেল তৈরি করব, যা তিনটি convolutional লেয়ার এবং একটি fully connected লেয়ার নিয়ে গঠিত।

class BasicCNN(nn.Module):
    def __init__(self):
        super(BasicCNN, self).__init__()
        
        # Convolutional লেয়ার গুলো
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=3, stride=1, padding=1)
        self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, stride=1, padding=1)
        self.conv3 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, stride=1, padding=1)
        
        # Pooling লেয়ার
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)
        
        # Fully Connected লেয়ার
        self.fc1 = nn.Linear(64 * 3 * 3, 128)
        self.fc2 = nn.Linear(128, 10)  # Output 10 classes for digits 0-9

    def forward(self, x):
        # Convolutional লেয়ার এবং Activation
        x = self.pool(torch.relu(self.conv1(x)))
        x = self.pool(torch.relu(self.conv2(x)))
        x = self.pool(torch.relu(self.conv3(x)))
        
        # Flattening
        x = x.view(-1, 64 * 3 * 3)
        
        # Fully Connected লেয়ার এবং Output
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

ধাপ ৪: মডেল initialize, লস ফাংশন এবং optimizer নির্ধারণ করা

model = BasicCNN()
criterion = nn.CrossEntropyLoss()  # Cross-entropy loss for classification
optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam optimizer

ধাপ ৫: মডেল Training করা

এখন মডেল training এর জন্য একটি লুপ চালানো হবে।

# ট্রেনিং ফাংশন
num_epochs = 5
for epoch in range(num_epochs):
    running_loss = 0.0
    for images, labels in train_loader:
        # Gradients reset করা
        optimizer.zero_grad()
        
        # Forward pass
        outputs = model(images)
        loss = criterion(outputs, labels)
        
        # Backward pass এবং optimize
        loss.backward()
        optimizer.step()
        
        # Loss update করা
        running_loss += loss.item()
    
    # প্রতি epoch শেষে average loss print করা
    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(train_loader):.4f}')

ধাপ ৬: মডেল Evaluation করা

মডেল training শেষে test ডেটাসেটে evaluate করা হবে।

# মডেল evaluation
correct = 0
total = 0
with torch.no_grad():
    for images, labels in test_loader:
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

accuracy = 100 * correct / total
print(f'Accuracy on test data: {accuracy:.2f}%')

কোডের সারাংশ:

  1. Data Transformation: MNIST ডেটাকে টেনসর এবং normalized করা হয়।
  2. CNN Model: একটি বেসিক CNN মডেল তৈরি করা হয়েছে, যা তিনটি Convolutional এবং দুটি Fully Connected লেয়ার নিয়ে গঠিত।
  3. Training Loop: num_epochs অনুযায়ী মডেল ট্রেন করা হয়, যেখানে মডেলের loss প্রতিটি epoch শেষে দেখা যায়।
  4. Evaluation: টেস্ট ডেটাসেটের উপর মডেলের accuracy পরিমাপ করা হয়।

এই বেসিক CNN মডেলটি সহজেই MNIST dataset থেকে ০-৯ সংখ্যা সনাক্ত করতে পারে এবং তুলনামূলক ভালো accuracy প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...