PyTorch ব্যবহার করে একটি বেসিক Neural Network মডেল তৈরি করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করবো। এই উদাহরণে, আমরা একটি সহজ Feedforward Neural Network তৈরি করবো যা MNIST ডাটাসেট (হাতের লেখা সংখ্যা) ব্যবহার করে সংখ্যা শনাক্ত করবে।
ধাপ ১: PyTorch ইনস্টলেশন এবং ইমপোর্ট
প্রথমে, PyTorch এবং অন্যান্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করুন (যদি এখনও না করা থাকে):
pip install torch torchvision
এখন Python কোডে প্রয়োজনীয় লাইব্রেরি ইমপোর্ট করুন:
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)
test_dataset = torchvision.datasets.MNIST(root='./data', train=False, transform=transform, download=True)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)
ধাপ ৩: Neural Network মডেল তৈরি করা
একটি সহজ ফিডফরোয়ার্ড নিউরাল নেটওয়ার্ক তৈরি করবো যা ইনপুট (28x28 পিক্সেল) গ্রহণ করে এবং আউটপুট হিসেবে 10টি ক্লাস (0-9) প্রদান করবে:
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(28 * 28, 128) # প্রথম লেয়ার (784 থেকে 128)
self.fc2 = nn.Linear(128, 64) # দ্বিতীয় লেয়ার (128 থেকে 64)
self.fc3 = nn.Linear(64, 10) # আউটপুট লেয়ার (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()
ধাপ ৪: লস ফাংশন এবং অপ্টিমাইজার সেট করা
আমরা ক্রস-এন্ট্রপি লস এবং স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট (SGD) অপ্টিমাইজার ব্যবহার করবো:
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
ধাপ ৫: মডেল ট্রেইনিং
আমরা মডেলটি ট্রেইন করবো:
num_epochs = 5
for epoch in range(num_epochs):
for images, labels in train_loader:
# ফোরওয়ার্ড পাস
outputs = model(images)
loss = criterion(outputs, labels)
# ব্যাকওয়ার্ড পাস এবং অপ্টিমাইজেশন
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
ধাপ ৬: মডেল টেস্টিং
এখন আমরা মডেলটি টেস্ট ডাটাসেটে কিভাবে পারফর্ম করে তা পরীক্ষা করবো:
model.eval() # ইভালুয়েশন মোডে সেট করা
correct = 0
total = 0
with torch.no_grad():
for images, labels in test_loader:
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
accuracy = 100 * correct / total
print(f'Accuracy of the model on the test dataset: {accuracy:.2f}%')
এই কোডটি আমাদের বেসিক Neural Network মডেলটি ট্রেইন ও টেস্ট করার জন্য। আপনি চাইলে বিভিন্ন হাইপারপ্যারামিটার ও লেয়ারের সংখ্যা পরিবর্তন করে মডেলের পারফরমেন্স উন্নত করতে পারেন।
Read more