Machine Learning Gluon API দিয়ে CNN তৈরি গাইড ও নোট

324

Convolutional Neural Network (CNN) হল একটি বিশেষ ধরনের নিউরাল নেটওয়ার্ক যা প্রধানত ইমেজ ডেটার জন্য ব্যবহৃত হয়। Gluon API ব্যবহার করে আপনি সহজেই CNN তৈরি করতে পারেন। Gluon হল MXNet-এর একটি উচ্চস্তরের API যা দ্রুত মডেল তৈরি এবং প্রশিক্ষণ করার জন্য সহায়ক। এটি বিশেষভাবে Deep Learning মডেল যেমন CNN, RNN, বা GAN তৈরির জন্য ব্যবহৃত হয়।

এখানে আমরা Gluon API ব্যবহার করে একটি সাধারণ CNN তৈরি করার উদাহরণ দেখব।


১. CNN মডেল তৈরি করা - Gluon API দিয়ে

এই উদাহরণে, আমরা একটি সাধারন CNN মডেল তৈরি করব যা MNIST ডেটাসেট (হাতে লেখা ডিজিটের ছবি) দিয়ে প্রশিক্ষিত হবে। আমরা Sequential API ব্যবহার করব CNN মডেল তৈরির জন্য এবং এতে Convolutional, Pooling, এবং Fully Connected লেয়ার থাকবে।

1.1 প্রয়োজনীয় লাইব্রেরি ইনস্টলেশন

প্রথমে আপনার সিস্টেমে প্রয়োজনীয় লাইব্রেরি ইনস্টল করতে হবে:

pip install mxnet gluoncv

1.2 CNN মডেল কোড উদাহরণ

import mxnet as mx
from mxnet import nd
from mxnet.gluon import nn
from mxnet.gluon.data.vision import datasets, transforms
from mxnet.gluon.data import DataLoader

# 1. ট্রেনিং ডেটা প্রস্তুতি
transform = transforms.Compose([
    transforms.Resize(28),  # সাইজ 28x28 তে রিসাইজ করা
    transforms.ToTensor(),  # টেনসর ফরম্যাটে রূপান্তর
    transforms.Normalize(mean=[0.13], std=[0.31])  # সোজা মান এবং স্ট্যান্ডার্ড ডিভিয়েশন
])

# MNIST ডেটাসেট লোড করা
train_data = datasets.MNIST(train=True).transform_first(transform)
test_data = datasets.MNIST(train=False).transform_first(transform)

# DataLoader তৈরি করা
batch_size = 64
train_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_data, batch_size=batch_size, shuffle=False)

# 2. CNN মডেল তৈরি করা
model = nn.Sequential()

# প্রথম কনভোলিউশনাল লেয়ার (3 চ্যানেল ইনপুট, 32 ফিল্টার, 3x3 কোর)
model.add(nn.Conv2D(32, kernel_size=3, padding=1, activation='relu'))

# পুলিং লেয়ার (MaxPooling 2x2)
model.add(nn.MaxPool2D(pool_size=2))

# দ্বিতীয় কনভোলিউশনাল লেয়ার (32 ইনপুট, 64 ফিল্টার)
model.add(nn.Conv2D(64, kernel_size=3, padding=1, activation='relu'))

# পুলিং লেয়ার (MaxPooling 2x2)
model.add(nn.MaxPool2D(pool_size=2))

# Fully connected লেয়ার
model.add(nn.Flatten())  # ডাটা ফ্ল্যাট করা
model.add(nn.Dense(128, activation='relu'))
model.add(nn.Dense(10))  # আউটপুট লেয়ার (10 ক্লাস)

# মডেল ইনিশিয়ালাইজ করা
model.initialize(mx.init.Xavier())

# 3. মডেল প্রশিক্ষণের জন্য সেটআপ
loss_fn = mx.gluon.loss.SoftmaxCrossEntropyLoss()
trainer = mx.gluon.Trainer(model.collect_params(), 'adam', {'learning_rate': 0.001})

# 4. মডেল প্রশিক্ষণ করা
epochs = 5
for epoch in range(epochs):
    total_loss = 0
    total_correct = 0
    total_samples = 0

    # প্রশিক্ষণ ডেটা লোড করা
    for data, label in train_loader:
        with mx.autograd.record():
            output = model(data)
            loss = loss_fn(output, label)
        loss.backward()

        trainer.step(batch_size)
        
        # মোট ক্ষতি এবং সঠিক পূর্বাভাসের সংখ্যা গণনা করা
        total_loss += loss.mean().asscalar()
        predicted = output.argmax(axis=1)
        total_correct += (predicted == label).sum().asscalar()
        total_samples += label.size

    print(f"Epoch {epoch+1}: Loss: {total_loss/total_samples}, Accuracy: {total_correct/total_samples * 100}%")

2. CNN মডেলের অংশগুলো

2.1 Convolutional Layer:

  • Conv2D লেয়ারটি 2D কনভোলিউশন অপারেশন পরিচালনা করে। এই লেয়ারটি filters ব্যবহার করে ইনপুট ডেটার বৈশিষ্ট্য বের করতে সহায়তা করে।
  • এখানে, প্রথম কনভোলিউশনাল লেয়ারটিতে ৩২টি ফিল্টার ব্যবহার করা হয়েছে এবং আউটপুটের জন্য ReLU অ্যাক্টিভেশন ফাংশন ব্যবহার করা হয়েছে।

2.2 Pooling Layer:

  • MaxPool2D পুলিং অপারেশন করে, যা ইমেজের স্পেসিয়াল ডাইমেনশন কমিয়ে আনে এবং মডেলটি আরো জেনারেলাইজড হয়।

2.3 Flattening:

  • Flatten লেয়ারটি 2D আউটপুটকে 1D আউটপুটে রূপান্তরিত করে, যাতে এটি Dense Layer-এ ব্যবহার করা যায়।

2.4 Fully Connected Layer:

  • Dense লেয়ারটি নিউরাল নেটওয়ার্কের একটি ফুলি কানেক্টেড লেয়ার, যা ইনপুটের সাথে লিনিয়ার অপারেশন করে এবং আউটপুট তৈরি করে।

2.5 Output Layer:

  • আউটপুট লেয়ারে 10টি নিউরন রাখা হয়েছে (কারণ MNIST-এ 10টি ক্লাস রয়েছে) এবং এতে SoftmaxCrossEntropyLoss ব্যবহৃত হয়।

3. Model Training এবং Evaluation

3.1 Training Loop:

  • প্রশিক্ষণ চলাকালে, প্রতি ব্যাচে loss.backward() ব্যবহার করে গ্রেডিয়েন্ট গননা এবং trainer.step(batch_size) ব্যবহার করে ওয়েট আপডেট করা হয়।
  • প্রতিটি ব্যাচের জন্য ক্ষতি এবং সঠিক পূর্বাভাস গণনা করা হয়।

3.2 Accuracy Calculation:

  • প্রতি ব্যাচে আউটপুটের মধ্যে সর্বোচ্চ মানের index দিয়ে পূর্বাভাস করা হয় এবং accuracy নির্ধারণ করা হয়।

4. মডেল টেস্টিং

প্রশিক্ষণ শেষ হওয়ার পরে, আপনি test_loader ব্যবহার করে মডেলের সঠিকতা যাচাই করতে পারেন:

total_correct = 0
total_samples = 0
for data, label in test_loader:
    output = model(data)
    predicted = output.argmax(axis=1)
    total_correct += (predicted == label).sum().asscalar()
    total_samples += label.size

accuracy = total_correct / total_samples * 100
print(f"Test Accuracy: {accuracy}%")

5. সারাংশ

  • CNN তৈরি করতে Gluon API খুবই সুবিধাজনক। nn.Sequential() ব্যবহার করে সহজে লেয়ারগুলি একে একে যুক্ত করা যায় এবং মডেল তৈরি করা হয়।
  • আমরা এখানে একটি সাধারণ CNN তৈরি করেছি যা MNIST ডেটাসেট ব্যবহার করে প্রশিক্ষিত হচ্ছে।
  • Convolutional Layers, Pooling, Fully Connected Layers, এবং Flattening লেয়ারগুলি মডেলটিকে শক্তিশালী এবং কার্যকরী করে তোলে।
  • প্রশিক্ষণের জন্য Softmax Cross Entropy Loss এবং Adam Optimizer ব্যবহার করা হয়েছে।
Content added By
Promotion

Are you sure to start over?

Loading...