Chainer ব্যবহার করে একটি বেসিক Classification প্রজেক্ট তৈরি করতে আমরা একটি সরল নিউরাল নেটওয়ার্ক মডেল তৈরি করব যা MNIST ডেটাসেটের উপর ট্রেন করা হবে। MNIST ডেটাসেট হলো হাতে লেখা সংখ্যা (০-৯) নিয়ে গঠিত একটি সাধারণ ডেটাসেট যা image classification মডেল তৈরিতে ব্যবহৃত হয়।
ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করা
Chainer এবং প্রয়োজনীয় লাইব্রেরি গুলো ইনস্টল করে এবং ইম্পোর্ট করে প্রজেক্ট শুরু করতে হবে।
import chainer
import chainer.functions as F
import chainer.links as L
from chainer import Chain, optimizers, training
from chainer.training import extensions
from chainer.datasets import mnist
import numpy as np
ধাপ ২: MNIST ডেটাসেট লোড করা
Chainer এ MNIST ডেটাসেট খুব সহজেই লোড করা যায়। আমরা ডেটাসেটটিকে train এবং test সেটে বিভক্ত করব।
# MNIST ডেটাসেট লোড করা
train, test = mnist.get_mnist()
ধাপ ৩: নিউরাল নেটওয়ার্ক মডেল তৈরি করা
এখানে আমরা একটি বেসিক Fully Connected নিউরাল নেটওয়ার্ক (Multilayer Perceptron) মডেল তৈরি করব যা MNIST ইমেজ ডেটা প্রসেস করবে।
# বেসিক নিউরাল নেটওয়ার্ক মডেল তৈরি
class MLP(Chain):
def __init__(self):
super(MLP, self).__init__()
with self.init_scope():
# Input layer থেকে hidden layer (100 units) এ সংযোগ
self.fc1 = L.Linear(784, 100)
# Hidden layer থেকে output layer (10 units) এ সংযোগ
self.fc2 = L.Linear(100, 10)
def forward(self, x):
# Hidden layer এ relu activation function প্রয়োগ করা
h = F.relu(self.fc1(x))
# Output layer এ softmax activation প্রয়োগ করা
return self.fc2(h)
এখানে,
fc1প্রথম fully connected লেয়ার যা 784 (28x28) ইনপুট পয়েন্ট এবং 100 ইউনিট ধারণ করে।fc2দ্বিতীয় fully connected লেয়ার যা ১০টি ক্লাসের জন্য আউটপুট প্রদান করবে (0-9)।
ধাপ ৪: মডেল, লস ফাংশন এবং অপটিমাইজার ইনিশিয়ালাইজ করা
Chainer এ model setup করার জন্য classifier wrapper ব্যবহার করা হয়, যাতে loss এবং accuracy এর মতো মেট্রিক্স স্বয়ংক্রিয়ভাবে calculate করা যায়।
# মডেল ইনিশিয়ালাইজ করা
model = L.Classifier(MLP())
# Optimizer তৈরি করা (SGD ব্যবহার করা হচ্ছে)
optimizer = optimizers.SGD(lr=0.01)
optimizer.setup(model)
ধাপ ৫: ট্রেইনার এবং এক্সটেনশন সেটআপ করা
Chainer এ training এবং evaluation process পরিচালনার জন্য Trainer ব্যবহার করা হয়। এটি dataset এবং optimizer নিয়ে কাজ করে এবং training process এর বিভিন্ন পর্যায়ে extension গুলো যোগ করতে দেয়।
# Data iterators তৈরি করা
train_iter = chainer.iterators.SerialIterator(train, batch_size=64, shuffle=True)
test_iter = chainer.iterators.SerialIterator(test, batch_size=64, repeat=False, shuffle=False)
# Updater এবং Trainer তৈরি করা
updater = training.updaters.StandardUpdater(train_iter, optimizer)
trainer = training.Trainer(updater, (10, 'epoch'), out='result')
# Extensions যোগ করা
trainer.extend(extensions.Evaluator(test_iter, model)) # মডেল evaluate করা
trainer.extend(extensions.LogReport()) # Training log রাখা
trainer.extend(extensions.PrintReport(['epoch', 'main/loss', 'validation/main/loss', 'main/accuracy', 'validation/main/accuracy'])) # Report print করা
trainer.extend(extensions.ProgressBar()) # Progress bar দেখানো
ধাপ ৬: মডেল ট্রেনিং করা
Trainer ব্যবহার করে মডেল ট্রেনিং প্রক্রিয়া শুরু করা হবে।
# মডেল ট্রেনিং করা
trainer.run()
ধাপ ৭: মডেল Evaluate করা
মডেল ট্রেনিং শেষে test ডেটাসেটে এর accuracy নির্ণয় করা হবে।
# Test ডেটাসেটে মডেল evaluate করা
test_evaluator = extensions.Evaluator(test_iter, model)
results = test_evaluator()
print(f"Test Accuracy: {results['main/accuracy']:.4f}")
কোডের সংক্ষিপ্ত সারাংশ
- Model Definition:
MLPক্লাস তৈরি করে একটি বেসিক ফিড-ফরোয়ার্ড নিউরাল নেটওয়ার্ক মডেল তৈরি করা হয়েছে। - Optimizer এবং Trainer Setup: মডেলের জন্য SGD optimizer এবং training extensions ব্যবহার করা হয়েছে।
- Model Training এবং Evaluation: 10 epochs ধরে মডেলটি train করা হয়েছে এবং test dataset এ এর accuracy পরিমাপ করা হয়েছে।
এই বেসিক classification প্রজেক্টের মাধ্যমে Chainer এর মাধ্যমে image classification এর মৌলিক ধারণা শেখা যায় এবং MNIST ডেটাসেট এর মতো ডেটার উপর মডেল ট্রেনিং এর কৌশল জানা যায়।
Read more