উদাহরণসহ মডেল সেভ এবং লোড করার প্রক্রিয়া

মডেল সেভ এবং লোড করা - টর্চ (Torch) - Latest Technologies

313

PyTorch-এ মডেল সেভ এবং লোড করার জন্য আমরা দুটি প্রধান ধাপ অনুসরণ করি:

  1. মডেল সেভ করা: আমরা মডেলের বর্তমান স্টেট (weights এবং biases) সংরক্ষণ করি, যাতে পরবর্তীতে মডেলটি পুনরায় ব্যবহার করা যায়।
  2. মডেল লোড করা: সংরক্ষিত মডেল পুনরায় লোড করে, এটি দিয়ে ইনফারেন্স বা পুনরায় ট্রেনিং করা।

নিচে উদাহরণসহ এই প্রক্রিয়া ব্যাখ্যা করা হয়েছে।

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

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

ধাপ ২: ডেটাসেট লোড করা

আমরা 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)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)

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

একটি সিম্পল নিউরাল নেটওয়ার্ক মডেল তৈরি করা:

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()  # মডেলকে ট্রেনিং মোডে সেট করা
    for images, labels in train_loader:
        outputs = model(images)
        loss = criterion(outputs, labels)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    
train_model(model, train_loader, criterion, optimizer)

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

মডেলটি সেভ করার জন্য PyTorch-এর torch.save ফাংশন ব্যবহার করা হয়। এখানে মডেলের স্টেট ডিকশনারি সংরক্ষণ করা হবে।

torch.save(model.state_dict(), 'simple_nn_model.pth')
  • model.state_dict(): এটি মডেলের বর্তমান স্টেট (weights এবং biases) সংরক্ষণ করে।
  • 'simple_nn_model.pth': ফাইলের নাম যেখানে মডেল সংরক্ষণ করা হবে।

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

সংরক্ষিত মডেলটি লোড করতে, প্রথমে একই আর্কিটেকচারের একটি মডেল তৈরি করতে হবে, তারপর সংরক্ষিত স্টেট লোড করতে হবে।

# মডেলের নতুন ইনস্ট্যান্স তৈরি করা
loaded_model = SimpleNN()

# সেভ করা মডেল স্টেট লোড করা
loaded_model.load_state_dict(torch.load('simple_nn_model.pth'))

# মডেলকে ইভালুয়েশন মোডে সেট করা
loaded_model.eval()

ধাপ ৮: ইনফারেন্স করা

লোড করা মডেল দিয়ে এখন ইনফারেন্স করা যাবে। আমরা এখানে একটি ইমেজে প্রেডিকশন করবো।

# একটি ব্যাচ থেকে একটি ইমেজ এবং লেবেল নেওয়া
images, labels = next(iter(train_loader))
image = images[0].unsqueeze(0)  # একটি ইমেজ নিয়ে এক্সট্রা ব্যাচ ডাইমেনশন যোগ করা

# মডেল দিয়ে প্রেডিকশন করা
with torch.no_grad():
    output = loaded_model(image)
    _, predicted = torch.max(output, 1)
    print(f'Predicted: {predicted.item()}, Actual: {labels[0].item()}')

মডেল সেভ এবং লোড করার প্রক্রিয়ার সংক্ষেপ:

মডেল সেভ করা:

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

মডেল লোড করা:

loaded_model = SimpleNN()
loaded_model.load_state_dict(torch.load('simple_nn_model.pth'))
loaded_model.eval()

এভাবে, PyTorch-এ মডেল সেভ এবং লোড করা হয়। এই পদ্ধতিতে মডেল সংরক্ষণ করলে, আপনি পরবর্তীতে সহজেই মডেল লোড করে ইনফারেন্স বা পুনরায় ট্রেনিং করতে পারবেন।

Promotion

Are you sure to start over?

Loading...