Chainer ব্যবহার করে একটি Convolutional Neural Network (CNN) মডেল তৈরি করতে হলে প্রথমে Convolutional Layers, Pooling Layers, এবং Fully Connected Layers সংজ্ঞায়িত করতে হবে। নিচে Chainer ব্যবহার করে একটি সহজ CNN মডেল তৈরি এবং ট্রেনিংয়ের জন্য উদাহরণ দেওয়া হলো।
উদাহরণ: MNIST ডেটাসেট ব্যবহার করে একটি CNN মডেল তৈরি
আমরা MNIST ডেটাসেট (হাতে লেখা ডিজিট) ব্যবহার করবো, যা প্রতিটি ইমেজ ২৮x২৮ আকারের এবং গ্রেস্কেল। লক্ষ্য হল এই ইমেজগুলোকে ০-৯ এর মধ্যে সঠিক শ্রেণীতে ক্লাসিফাই করা।
import chainer
import chainer.functions as F
import chainer.links as L
from chainer import Chain, optimizers, training, datasets, iterators
from chainer.training import extensions
# MNIST ডেটাসেট লোড করা
train, test = datasets.get_mnist(ndim=3) # ndim=3 মানে এক্সট্রা চ্যানেল সহ ইমেজ লোড করা
# CNN মডেল তৈরি করা
class CNNModel(Chain):
def __init__(self):
super(CNNModel, self).__init__()
with self.init_scope():
# Convolutional এবং Fully Connected লেয়ার সংজ্ঞায়িত করা
self.conv1 = L.Convolution2D(in_channels=1, out_channels=16, ksize=3, stride=1, pad=1) # প্রথম কনভোলিউশন লেয়ার (৩x৩ ফিল্টার)
self.conv2 = L.Convolution2D(in_channels=16, out_channels=32, ksize=3, stride=1, pad=1) # দ্বিতীয় কনভোলিউশন লেয়ার (৩x৩ ফিল্টার)
self.fc1 = L.Linear(None, 128) # Fully Connected লেয়ার (ইনপুট স্বয়ংক্রিয়)
self.fc2 = L.Linear(128, 10) # আউটপুট লেয়ার (১০টি ক্লাসের জন্য)
# Forward Propagation
def __call__(self, x):
h = F.relu(self.conv1(x)) # প্রথম কনভোলিউশন এবং ReLU
h = F.max_pooling_2d(h, ksize=2) # প্রথম Max Pooling
h = F.relu(self.conv2(h)) # দ্বিতীয় কনভোলিউশন এবং ReLU
h = F.max_pooling_2d(h, ksize=2) # দ্বিতীয় Max Pooling
h = F.relu(self.fc1(h)) # Fully Connected লেয়ার এবং ReLU
y = self.fc2(h) # চূড়ান্ত Fully Connected লেয়ার (আউটপুট)
return y
# মডেল এবং অপটিমাইজার সেটআপ করা
model = L.Classifier(CNNModel()) # L.Classifier ফাংশন ক্লাসিফিকেশন জন্য ক্রস এন্ট্রপি লস এবং অ্যাকুরেসি গণনা সহজ করে দেয়
optimizer = optimizers.Adam()
optimizer.setup(model)
# ডেটা লোডার তৈরি করা
batch_size = 64
train_iter = iterators.SerialIterator(train, batch_size)
test_iter = iterators.SerialIterator(test, batch_size, repeat=False, shuffle=False)
# ট্রেনার সেটআপ করা
updater = training.StandardUpdater(train_iter, optimizer, device=-1)
trainer = training.Trainer(updater, (10, 'epoch'), out='result')
# Extensions যোগ করা
trainer.extend(extensions.Evaluator(test_iter, model, device=-1)) # টেস্ট ডেটার উপর ইভ্যালুয়েশন
trainer.extend(extensions.LogReport()) # লস এবং অ্যাকুরেসি রিপোর্ট
trainer.extend(extensions.PrintReport(['epoch', 'main/loss', 'validation/main/loss', 'main/accuracy', 'validation/main/accuracy']))
trainer.extend(extensions.ProgressBar()) # প্রোগ্রেস বার দেখানোর জন্য
# মডেল ট্রেনিং চালানো
trainer.run()
ব্যাখ্যা
CNNModel ক্লাস:
conv1এবংconv2নামে দুটি কনভোলিউশন লেয়ার রয়েছে। প্রতিটি লেয়ারের জন্য আমরা ৩x৩ ফিল্টার ব্যবহার করেছি এবং ReLU অ্যাক্টিভেশন প্রয়োগ করেছি।fc1এবংfc2হলো Fully Connected লেয়ার।fc1তে ১২৮টি নিউরন রয়েছে এবংfc2চূড়ান্ত আউটপুট লেয়ার যা ১০টি ক্লাসের মধ্যে যেকোনো একটি প্রেডিক্ট করে।
Data Loading:
train_iterএবংtest_iterডেটাসেটকে ব্যাচ আকারে লোড করে।batch_size৬৪ দেয়া হয়েছে, অর্থাৎ একবারে ৬৪টি ইমেজ প্রশিক্ষণে যায়।
Trainer এবং Extensions:
StandardUpdaterএবংTrainerব্যবহার করে Training Loop সেটআপ করা হয়েছে।extensions.Evaluatorদিয়ে টেস্ট ডেটার ইভ্যালুয়েশন এবংextensions.PrintReportদিয়ে প্রতিটি epoch এর শেষে লস এবং অ্যাকুরেসি রিপোর্ট করা হয়।
আউটপুট
মডেলটি ১০ epoch এর জন্য প্রশিক্ষণ চালানো হবে। প্রতিটি epoch শেষে মডেলের ট্রেনিং লস, ভ্যালিডেশন লস, ট্রেনিং অ্যাকুরেসি এবং ভ্যালিডেশন অ্যাকুরেসি প্রিন্ট হবে।
সংক্ষেপে
এই উদাহরণে আমরা Chainer ব্যবহার করে একটি বেসিক CNN মডেল তৈরি এবং ট্রেনিং করেছি যা MNIST ডেটাসেটে ভালোভাবে কাজ করতে সক্ষম। CNN মডেলটি ইমেজ ডেটা থেকে বৈশিষ্ট্যগুলো খুঁজে বের করে এবং শ্রেণীকরণ করতে সহায়তা করে। Chainer লাইব্রেরি CNN মডেল তৈরি এবং ট্রেনিং প্রক্রিয়াকে সহজ ও কার্যকর করে।
Read more