PyTorch-এ মডেল সেভ এবং লোড করার জন্য আমরা দুটি প্রধান ধাপ অনুসরণ করি:
- মডেল সেভ করা: আমরা মডেলের বর্তমান স্টেট (weights এবং biases) সংরক্ষণ করি, যাতে পরবর্তীতে মডেলটি পুনরায় ব্যবহার করা যায়।
- মডেল লোড করা: সংরক্ষিত মডেল পুনরায় লোড করে, এটি দিয়ে ইনফারেন্স বা পুনরায় ট্রেনিং করা।
নিচে উদাহরণসহ এই প্রক্রিয়া ব্যাখ্যা করা হয়েছে।
ধাপ ১: প্যাকেজ ইমপোর্ট করা
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-এ মডেল সেভ এবং লোড করা হয়। এই পদ্ধতিতে মডেল সংরক্ষণ করলে, আপনি পরবর্তীতে সহজেই মডেল লোড করে ইনফারেন্স বা পুনরায় ট্রেনিং করতে পারবেন।
Read more