Torch (PyTorch) ব্যবহার করে একটি Basic Image Classification মডেল তৈরি করা সহজ এবং কার্যকর। এখানে আমরা একটি সহজ CNN (Convolutional Neural Network) মডেল তৈরি করব, যা MNIST ডেটাসেট ব্যবহার করে হ্যান্ডরিটেন ডিজিট ক্লাসিফিকেশন করতে সক্ষম হবে।
ধাপসমূহ
লাইব্রেরি ইনস্টল এবং ইম্পোর্ট করা: প্রথমে, PyTorch এবং torchvision লাইব্রেরি ইনস্টল করতে হবে (যদি আগে ইনস্টল না থাকে)।
pip install torch torchvision
MNIST ডেটাসেট লোড করা: torchvision লাইব্রেরি ব্যবহার করে MNIST ডেটাসেট ডাউনলোড এবং লোড করা।
মডেল ডিজাইন করা: একটি সরল CNN মডেল তৈরি করা, যা ইমেজ ফিচার এক্সট্র্যাক্ট করতে এবং ক্লাসিফিকেশন করতে পারবে।
মডেল ট্রেনিং করা: মডেল ট্রেনিং করার জন্য ট্রেনিং লুপ তৈরি করা এবং ভ্যালিডেশন ডেটা ব্যবহার করে মডেলের পারফরম্যান্স যাচাই করা।
পুরো কোড
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
# ডিভাইস চেক করা (GPU থাকলে CUDA ব্যবহার করা)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# MNIST ডেটাসেট লোড করার জন্য ট্রান্সফর্মেশন তৈরি
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)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
# CNN মডেল ডিজাইন
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
self.pool = nn.MaxPool2d(2, 2)
self.fc1 = nn.Linear(64 * 7 * 7, 128)
self.fc2 = nn.Linear(128, 10)
self.relu = nn.ReLU()
self.dropout = nn.Dropout(0.25)
def forward(self, x):
x = self.pool(self.relu(self.conv1(x)))
x = self.pool(self.relu(self.conv2(x)))
x = x.view(-1, 64 * 7 * 7) # ফ্ল্যাট করা
x = self.relu(self.fc1(x))
x = self.dropout(x)
x = self.fc2(x)
return x
# মডেল ইনস্ট্যান্স তৈরি এবং ডিভাইসে সরানো
model = SimpleCNN().to(device)
# লস ফাংশন এবং অপ্টিমাইজার নির্ধারণ
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# ট্রেনিং ফাংশন
def train(model, train_loader, criterion, optimizer, device):
model.train()
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()
return running_loss / len(train_loader)
# এভালুয়েশন ফাংশন
def evaluate(model, test_loader, criterion, device):
model.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()
accuracy = 100 * correct / total
return accuracy
# মডেল ট্রেনিং
num_epochs = 10
for epoch in range(num_epochs):
train_loss = train(model, train_loader, criterion, optimizer, device)
accuracy = evaluate(model, test_loader, criterion, device)
print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {train_loss:.4f}, Accuracy: {accuracy:.2f}%")
# মডেল সংরক্ষণ করা
torch.save(model.state_dict(), 'simple_cnn_mnist.pth')
ব্যাখ্যা:
- ডেটাসেট এবং ট্রান্সফর্মেশন: MNIST ডেটাসেট লোড করার সময়, আমরা ইমেজগুলোকে টেনসর এবং নর্মালাইজড ফরম্যাটে রূপান্তর করেছি।
- মডেল আর্কিটেকচার:
- মডেলে দুটি কনভোলিউশন লেয়ার (
conv1এবংconv2), একটি ম্যাক্সপুল লেয়ার, এবং দুটি ফFully connected লেয়ার (fc1এবংfc2) রয়েছে। - Dropout লেয়ার ব্যবহার করে ওভারফিটিং কমানো হয়েছে।
- মডেলে দুটি কনভোলিউশন লেয়ার (
- ট্রেনিং এবং এভালুয়েশন ফাংশন: মডেল ট্রেনিং করার জন্য আমরা একটি
trainফাংশন এবং মডেলের পারফরম্যান্স যাচাই করার জন্য একটিevaluateফাংশন তৈরি করেছি। - মডেল সংরক্ষণ: ট্রেনিং শেষে মডেলটি
'simple_cnn_mnist.pth'নামে সংরক্ষণ করা হয়েছে।
এই পদ্ধতিতে, আপনি PyTorch ব্যবহার করে একটি Basic Image Classification মডেল তৈরি করতে পারেন। মডেলের আর্কিটেকচার এবং ডেটাসেট পরিবর্তন করে আপনার প্রয়োজন অনুযায়ী আরও উন্নত মডেল তৈরি করা সম্ভব।
Read more