Machine Learning PyTorch দিয়ে CNN তৈরি গাইড ও নোট

267

Convolutional Neural Network (CNN) হল একটি ডিপ লার্নিং মডেল যা বিশেষভাবে চিত্র শনাক্তকরণ, ভিডিও বিশ্লেষণ, এবং অন্যান্য ভিজ্যুয়াল ডেটা প্রসেসিং কাজে ব্যবহৃত হয়। CNN মডেল সাধারণত Convolutional Layer, Pooling Layer, এবং Fully Connected Layer নিয়ে গঠিত। PyTorch দিয়ে CNN তৈরি করা একটি সহজ প্রক্রিয়া যা নিম্নলিখিত স্টেপে বাস্তবায়িত করা যেতে পারে।

১. প্রয়োজনীয় লাইব্রেরি ইনস্টলেশন

আপনার সিস্টেমে PyTorch এবং TorchVision ইনস্টল করা থাকতে হবে। যদি না থাকে, তাহলে এই কমান্ড দিয়ে ইনস্টল করতে পারেন:

pip install torch torchvision

২. CNN আর্কিটেকচার তৈরি করা

এখানে একটি সাধারণ CNN আর্কিটেকচার তৈরি করার উদাহরণ দেওয়া হলো:

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

# CNN মডেল তৈরি
class CNNModel(nn.Module):
    def __init__(self):
        super(CNNModel, self).__init__()
        
        # প্রথম কনভোলিউশনাল লেয়ার
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1)
        self.relu1 = nn.ReLU()
        self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
        
        # দ্বিতীয় কনভোলিউশনাল লেয়ার
        self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, padding=1)
        self.relu2 = nn.ReLU()
        self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
        
        # তৃতীয় কনভোলিউশনাল লেয়ার
        self.conv3 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding=1)
        self.relu3 = nn.ReLU()
        self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2)
        
        # ফ্ল্যাটিং
        self.fc1 = nn.Linear(128 * 3 * 3, 512)
        self.fc2 = nn.Linear(512, 10)  # আউটপুট 10টি ক্লাসের জন্য

    def forward(self, x):
        # ফিডফরোয়ার্ড পাস
        x = self.pool1(self.relu1(self.conv1(x)))
        x = self.pool2(self.relu2(self.conv2(x)))
        x = self.pool3(self.relu3(self.conv3(x)))
        
        # ফ্ল্যাটিং
        x = x.view(-1, 128 * 3 * 3)
        
        # পূর্ণসংখ্যার লেয়ার
        x = self.fc1(x)
        x = self.fc2(x)
        return x

# মডেল তৈরি
model = CNNModel()
print(model)

৩. ডেটা লোডিং এবং প্রিপ্রসেসিং

এখানে MNIST ডেটাসেট ব্যবহার করা হয়েছে, যা 28x28 পিক্সেল সাদা-কালো চিত্রের ডেটাসেট। PyTorch এর torchvision লাইব্রেরি দিয়ে আমরা ডেটা লোড এবং প্রিপ্রসেসিং করতে পারি।

# ডেটা ট্রান্সফরমেশন (নর্মালাইজেশন)
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))  # গড় এবং স্ট্যান্ডার্ড ডেভিয়েশন অনুযায়ী নর্মালাইজেশন
])

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

# ডেটা লোডার
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

৪. মডেল ট্রেনিং এবং টেস্টিং

এখন, মডেলটি ট্রেনিং করার জন্য এবং পরবর্তীতে টেস্টিং করার জন্য নিম্নলিখিত কোড ব্যবহার করা হবে।

# হার্ডওয়্যার নির্বাচন
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

# লস ফাংশন এবং অপটিমাইজার
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# মডেল ট্রেনিং
def train_model():
    model.train()
    for epoch in range(5):  # 5টি Epoch
        running_loss = 0.0
        for images, labels in train_loader:
            images, labels = images.to(device), labels.to(device)
            
            # গ্রেডিয়েন্টগুলি জিরো করুন
            optimizer.zero_grad()
            
            # ফরওয়ার্ড পাস
            outputs = model(images)
            loss = criterion(outputs, labels)
            
            # ব্যাকপ্রোপাগেশন
            loss.backward()
            
            # অপটিমাইজার দ্বারা ওজন আপডেট
            optimizer.step()
            
            running_loss += loss.item()
        
        print(f"Epoch [{epoch+1}/5], Loss: {running_loss/len(train_loader)}")

# মডেল টেস্টিং
def test_model():
    model.eval()  # মডেলটি eval মোডে এনে রাখুন
    correct = 0
    total = 0
    with torch.no_grad():
        for images, labels in test_loader:
            images, labels = images.to(device), labels.to(device)
            outputs = model(images)
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    
    print(f"Accuracy on test set: {100 * correct / total}%")

# মডেল ট্রেনিং এবং টেস্টিং
train_model()
test_model()

৫. মডেল সেভ এবং লোড করা

আপনি মডেলটি সেভ করতে এবং পরবর্তীতে লোড করতে পারেন:

# মডেল সেভ করা
torch.save(model.state_dict(), 'cnn_model.pth')

# মডেল লোড করা
model = CNNModel()
model.load_state_dict(torch.load('cnn_model.pth'))
model.eval()

সারাংশ

এটি ছিল একটি সহজ CNN মডেল তৈরি করার প্রক্রিয়া PyTorch দিয়ে। Convolutional Layers (যেমন Conv2d) ব্যবহার করে মডেলটি ইমেজ ফিচার এক্সট্র্যাক্ট করতে পারে এবং MaxPooling ব্যবহার করে ডাউনস্যাম্পলিং করা হয়। এরপর Fully Connected Layers ব্যবহার করে চূড়ান্ত ক্লাসিফিকেশন করা হয়। PyTorch এর nn.Module ক্লাসের মাধ্যমে CNN আর্কিটেকচার নির্মাণের প্রক্রিয়া খুবই নমনীয় এবং কাস্টমাইজযোগ্য।

Content added By
Promotion

Are you sure to start over?

Loading...