GPU ব্যবহার করে মডেল ট্রেনিং প্রজেক্ট

প্র্যাকটিস প্রোজেক্টস - টর্চ (Torch) - Latest Technologies

282

GPU ব্যবহার করে মডেল ট্রেনিং প্রজেক্টে আমরা দ্রুত এবং কার্যকরীভাবে মডেল ট্রেনিং করতে পারি, যা বড় ডেটাসেট এবং কমপ্লেক্স মডেলগুলির জন্য গুরুত্বপূর্ণ। এখানে আমরা একটি প্রকল্পের মাধ্যমে GPU ব্যবহার করে একটি মডেল ট্রেনিং এর ধাপ দেখাবো। এই প্রকল্পে, আমরা CIFAR-10 ডেটাসেট ব্যবহার করবো এবং ResNet18 মডেলের মাধ্যমে ইমেজ ক্লাসিফিকেশন করবো।

প্রকল্পের বিবরণ

  • ডেটাসেট: CIFAR-10 (ইমেজ ক্লাসিফিকেশন ডেটাসেট যার ১০টি ক্লাস আছে)
  • প্রি-ট্রেইনড মডেল: ResNet18
  • লক্ষ্য: GPU ব্যবহার করে মডেল ট্রেনিং করা এবং মডেলের পারফরমেন্স যাচাই করা।

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

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

ধাপ ২: CUDA ডিভাইস চেক করা

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f'Using device: {device}')

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

transform = transforms.Compose([
    transforms.Resize((224, 224)),  # ResNet এর জন্য ইমেজ রিসাইজ
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

train_dataset = torchvision.datasets.CIFAR10(root='./data', train=True, transform=transform, download=True)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)

test_dataset = torchvision.datasets.CIFAR10(root='./data', train=False, transform=transform, download=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

ধাপ ৪: প্রি-ট্রেইনড মডেল লোড এবং কাস্টমাইজ করা

# ResNet18 প্রি-ট্রেইনড মডেল লোড করা
model = models.resnet18(pretrained=True)

# ফিচার লেয়ারগুলো ফ্রিজ করা
for param in model.parameters():
    param.requires_grad = False

# মডেলের শেষ লেয়ার কাস্টমাইজ করা
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 10)  # CIFAR-10 এর জন্য আউটপুট ক্লাস সংখ্যা ১০

# মডেলকে GPU তে স্থানান্তর করা
model = model.to(device)

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

criterion = nn.CrossEntropyLoss()

# শুধুমাত্র শেষ লেয়ার (classifier) ট্রেনিং হবে
optimizer = optim.Adam(model.fc.parameters(), lr=0.001)

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

def train_model(model, train_loader, criterion, optimizer, device, num_epochs=10):
    model.train()
    for epoch in range(num_epochs):
        running_loss = 0.0
        for images, labels in train_loader:
            images, labels = images.to(device), labels.to(device)

            outputs = model(images)
            loss = criterion(outputs, labels)

            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

            running_loss += loss.item()

        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss / len(train_loader):.4f}')

# মডেল ট্রেনিং চালানো
train_model(model, train_loader, criterion, optimizer, device)

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

def validate_model(model, test_loader, criterion, device):
    model.eval()
    correct = 0
    total = 0
    val_loss = 0.0

    with torch.no_grad():
        for images, labels in test_loader:
            images, labels = images.to(device), labels.to(device)
            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
    print(f'Validation Loss: {val_loss / len(test_loader):.4f}, Accuracy: {accuracy:.2f}%')

# মডেল ভ্যালিডেশন চালানো
validate_model(model, test_loader, criterion, device)

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

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

ধাপ ৯: মডেল লোড করা এবং ইনফারেন্স

# মডেলের নতুন ইনস্ট্যান্স তৈরি এবং GPU তে স্থানান্তর করা
loaded_model = models.resnet18(pretrained=False)
loaded_model.fc = nn.Linear(num_features, 10)
loaded_model.load_state_dict(torch.load('resnet18_cifar10_gpu.pth'))
loaded_model = loaded_model.to(device)
loaded_model.eval()

# একটি ইমেজে প্রেডিকশন করা
images, labels = next(iter(test_loader))
image = images[0].unsqueeze(0).to(device)

with torch.no_grad():
    output = loaded_model(image)
    _, predicted = torch.max(output, 1)
    print(f'Predicted: {predicted.item()}, Actual: {labels[0].item()}')

প্রকল্পের সংক্ষিপ্ত বিবরণ

  1. ডেটাসেট লোড করা: CIFAR-10 ডেটাসেট ট্রেনিং এবং ভ্যালিডেশন ডেটাসেটে লোড করা হয়েছে।
  2. মডেল কাস্টমাইজেশন: ResNet18 মডেল ব্যবহার করে শেষ লেয়ার কাস্টমাইজ করা হয়েছে যাতে এটি CIFAR-10 ডেটাসেটের জন্য কাজ করে।
  3. ট্রেনিং: GPU তে মডেল ট্রেনিং করা হয়েছে এবং প্রতিটি এপক শেষে ট্রেনিং লস প্রিন্ট করা হয়েছে।
  4. ভ্যালিডেশন: মডেল ভ্যালিডেশন ডেটাসেটে পরীক্ষা করা হয়েছে এবং এক্যুরেসি এবং লস প্রিন্ট করা হয়েছে।
  5. মডেল সেভ এবং লোড: মডেল সংরক্ষণ এবং পুনরায় লোড করা হয়েছে ইনফারেন্সের জন্য।

এই প্রকল্পের মাধ্যমে, আপনি GPU ব্যবহার করে PyTorch-এ কিভাবে মডেল ট্রেনিং করতে হয় তা শিখতে পারবেন এবং মডেলের পারফরমেন্স উন্নত করতে পারবেন।

Promotion

Are you sure to start over?

Loading...