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

265

Autoencoders একটি প্রকারের নিউরাল নেটওয়ার্ক যা ইনপুট ডেটার সংকুচিত (compressed) রূপ শেখার মাধ্যমে ডেটা পুনর্গঠন (reconstruction) করতে সক্ষম। এটি সাধারণত ডেটার থেকে ফিচার এক্সট্র্যাকশন এবং ডেটা কম্প্রেশন, যেমন Dimensionality Reduction এ ব্যবহৃত হয়।

এখানে আমরা MXNet Gluon API ব্যবহার করে একটি সিম্পল Autoencoder তৈরি করব। Autoencoder দুটি প্রধান অংশে বিভক্ত:

  1. Encoder: ইনপুট ডেটা সংকুচিত করে।
  2. Decoder: সংকুচিত ডেটাকে পুনরায় আউটপুটে রূপান্তর করে।

আমরা MNIST ডেটাসেট ব্যবহার করব এবং একটি সাধারণ Fully Connected Autoencoder তৈরি করব।


Autoencoder তৈরি করা - Gluon API দিয়ে

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

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

pip install mxnet gluoncv matplotlib numpy

২. Autoencoder কোড উদাহরণ

এখানে একটি সিম্পল Fully Connected Autoencoder তৈরি করা হয়েছে যা MNIST ডেটাসেট ব্যবহার করবে:

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.ToTensor(),  # টেনসর ফরম্যাটে রূপান্তর
    transforms.Normalize(mean=[0.13], std=[0.31])  # নরমালাইজেশন
])

train_data = datasets.MNIST(train=True).transform_first(transform)
test_data = datasets.MNIST(train=False).transform_first(transform)

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. Autoencoder মডেল তৈরি করা
class Autoencoder(nn.Block):
    def __init__(self, **kwargs):
        super(Autoencoder, self).__init__(**kwargs)
        # Encoder (সংকুচিত করা)
        self.encoder = nn.Sequential()
        self.encoder.add(
            nn.Flatten(),  # ফ্ল্যাট করা ইনপুট
            nn.Dense(128, activation='relu'),  # 128 নিউরন
            nn.Dense(64, activation='relu')    # 64 নিউরন (সংকুচিত)
        )
        
        # Decoder (পুনর্গঠন করা)
        self.decoder = nn.Sequential()
        self.decoder.add(
            nn.Dense(128, activation='relu'),  # 128 নিউরন
            nn.Dense(784, activation='sigmoid'),  # আউটপুট 784 (28x28 পিক্সেল)
            nn.Reshape((-1, 1, 28, 28))  # আউটপুট ইমেজ আকারে রূপান্তর
        )

    def forward(self, x):
        encoded = self.encoder(x)  # ইনপুট সংকুচিত করা
        decoded = self.decoder(encoded)  # সংকুচিত ইনপুট পুনর্গঠন করা
        return decoded

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

# 3. প্রশিক্ষণ সেটআপ
loss_fn = mx.gluon.loss.L2Loss()  # L2 Loss ব্যবহার করা
trainer = mx.gluon.Trainer(net.collect_params(), 'adam', {'learning_rate': 0.001})

# 4. প্রশিক্ষণ ফাংশন
epochs = 5
for epoch in range(epochs):
    total_loss = 0
    for data, _ in train_loader:  # লেবেল প্রয়োজন নয়, কারণ এটি আউটপুট পুনর্গঠন
        with mx.autograd.record():
            output = net(data)  # পুনর্গঠন করা
            loss = loss_fn(output, data)  # আসল ডেটার সাথে তুলনা করা
        loss.backward()
        trainer.step(batch_size)

        total_loss += loss.mean().asscalar()

    print(f"Epoch {epoch+1}, Loss: {total_loss/len(train_loader)}")

Autoencoder কোড বিশ্লেষণ

১. ট্রেনিং ডেটা প্রস্তুতি

  • আমরা MNIST ডেটাসেট ব্যবহার করেছি এবং এর জন্য transforms.Compose ব্যবহার করে ডেটা টেনসর ফরম্যাটে রূপান্তর করেছি এবং মান নরমালাইজ করেছি।

২. Autoencoder মডেল

  • Encoder: প্রথমে ইনপুটকে Flatten করে, তারপর একাধিক Dense লেয়ার ব্যবহার করে সংকুচিত (compressed) ফিচার তৈরি করে।
  • Decoder: সংকুচিত ফিচারগুলিকে আবার পূর্ণরূপে Dense লেয়ার ব্যবহার করে পুনর্গঠন (reconstruction) করে।

৩. ক্ষতি ফাংশন (Loss Function)

  • এখানে আমরা L2 Loss ব্যবহার করেছি, যা ইনপুট এবং আউটপুটের মধ্যে ম্যানুয়াল রিকন্সট্রাকশন এবং আসল ডেটার মধ্যে পার্থক্য পরিমাপ করে।

৪. প্রশিক্ষণ (Training)

  • মডেলটি Adam Optimizer ব্যবহার করে প্রশিক্ষিত হচ্ছে, এবং প্রতি ব্যাচে loss.backward() ব্যবহার করে গ্র্যাডিয়েন্টের মাধ্যমে ওয়েট আপডেট করা হচ্ছে।

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

  • প্রশিক্ষণ শেষে, আপনি test_loader ব্যবহার করে মডেলটি পরীক্ষা করতে পারেন এবং দেখতে পারেন কতটা পুনর্গঠন (reconstruction) সঠিক হয়েছে।

3. Reconstruction Visualization

প্রশিক্ষণের শেষে, আপনি Autoencoder-এর মাধ্যমে input images এবং তাদের পুনর্গঠিত (reconstructed) সংস্করণ দেখতে পারেন:

import matplotlib.pyplot as plt

# কয়েকটি ইমেজ দেখুন
for data, _ in test_loader:
    output = net(data)
    # প্রথম 10 ইমেজ দেখুন
    for i in range(10):
        plt.subplot(2, 10, i + 1)
        plt.imshow(nd.transpose(data[i], (1, 2, 0)).asnumpy())
        plt.axis('off')

        plt.subplot(2, 10, i + 11)
        plt.imshow(nd.transpose(output[i], (1, 2, 0)).asnumpy())
        plt.axis('off')
    plt.show()
    break

ব্যাখ্যা:

  • এই কোড ব্লকে আমরা input images এবং তাদের reconstructed images পাশাপাশি দেখিয়েছি, যাতে আপনি মডেলটির পারফরম্যান্স দেখতে পারেন।

সারাংশ

  • Autoencoder একটি শক্তিশালী নেটওয়ার্ক যা ডেটার সংকুচিত রূপ তৈরি করে এবং পুনর্গঠন করতে পারে।
  • Gluon API ব্যবহার করে আমরা একটি সহজ Fully Connected Autoencoder তৈরি করেছি যা MNIST ডেটাসেট ব্যবহার করে প্রশিক্ষিত।
  • আমরা encoder-decoder আর্কিটেকচার তৈরি করেছি এবং L2 loss দিয়ে ক্ষতি (loss) গণনা করেছি।
  • মডেল প্রশিক্ষণ শেষে, reconstruction ফলাফলগুলি দেখার জন্য কিছু ইমেজ পুনর্গঠন করা হয়েছে।

এটি একটি সাধারণ Autoencoder উদাহরণ যা Gluon API এর মাধ্যমে তৈরি করা হয়েছে, এবং এটি Dimensionality Reduction, Feature Extraction, বা Anomaly Detection এর মতো সমস্যার জন্য ব্যবহার করা যেতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...