Autoencoder মডেল:
Autoencoder একটি অসুপারভাইজড লার্নিং মডেল, যা মূলত ডেটা কম্প্রেশন এবং ডেটা ডেনোইজিং এর জন্য ব্যবহৃত হয়। এটি একটি নিউরাল নেটওয়ার্ক মডেল যা ইনপুট ডেটার একটি সংকুচিত (compressed) প্রতিনিধিত্ব তৈরি করে এবং তারপর এটি পুনরায় পুনর্নির্মাণ (reconstruction) করে। Autoencoder মূলত encoder এবং decoder দুটি অংশ নিয়ে গঠিত।
- Encoder: ইনপুট ডেটাকে সংকুচিত (compress) করে এবং একটি ছোট latent space প্রতিনিধিত্ব তৈরি করে।
- Decoder: latent space থেকে ডেটা পুনরুদ্ধার করে এবং এটি আবার ইনপুট ডেটার কাছাকাছি আউটপুট হিসেবে পুনর্নির্মাণ করে।
Autoencoder এর দুটি প্রধান প্রকার:
- Simple Autoencoder: একটি সাধারণ (shallow) অটোএনকোডার।
- Deep Autoencoder: একটি গভীর (deep) অটোএনকোডার যা আরও গভীর স্তরযুক্ত (layered) নিউরাল নেটওয়ার্ক ব্যবহার করে।
১. Simple Autoencoder মডেল:
এখানে একটি সাধারণ (shallow) autoencoder তৈরি করা হবে যা 1টি hidden layer ব্যবহার করবে। সাধারণভাবে এটি Keras লাইব্রেরি ব্যবহার করে তৈরি করা হয়।
কোড উদাহরণ:
import numpy as np
from keras.models import Model
from keras.layers import Input, Dense
from keras.datasets import mnist
import matplotlib.pyplot as plt
# MNIST ডেটাসেট লোড করা
(x_train, _), (x_test, _) = mnist.load_data()
# ডেটা প্রিপ্রসেসিং
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = x_train.reshape((x_train.shape[0], np.prod(x_train.shape[1:])))
x_test = x_test.reshape((x_test.shape[0], np.prod(x_test.shape[1:])))
# আটোএনকোডারের আর্কিটেকচার তৈরি
input_img = Input(shape=(784,))
encoded = Dense(64, activation='relu')(input_img)
decoded = Dense(784, activation='sigmoid')(encoded)
# মডেল তৈরি
autoencoder = Model(input_img, decoded)
# কম্পাইলিং
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
# মডেল ট্রেনিং
autoencoder.fit(x_train, x_train, epochs=50, batch_size=256, shuffle=True, validation_data=(x_test, x_test))
# পুনঃনির্মাণের ফলাফল দেখানো
decoded_imgs = autoencoder.predict(x_test)
# প্রথম 10টি ইমেজ দেখানো
n = 10
plt.figure(figsize=(20, 4))
for i in range(n):
ax = plt.subplot(2, n, i + 1)
plt.imshow(x_test[i].reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
ax = plt.subplot(2, n, i + 1 + n)
plt.imshow(decoded_imgs[i].reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()
কোড ব্যাখ্যা:
- ডেটা লোড: এখানে আমরা MNIST ডেটাসেট ব্যবহার করেছি যা হাতের লেখা ডিজিট সম্বলিত 28x28 পিক্সেল ছবির ডেটাসেট।
- Preprocessing: ডেটাকে 0-1 পরিসরে স্কেল করা এবং রিসাইজ করা হয় (28x28 এর 1D array তে রূপান্তর করা হয়)।
- Model Architecture: একটি সাধারণ autoencoder তৈরি করা হয়েছে, যেখানে encoded অংশে একটি hidden layer (64 ইউনিট) এবং decoded অংশে output layer (784 ইউনিট) রয়েছে।
- Training: মডেলটি প্রশিক্ষণ দেয়া হয়
adamoptimizer এবংbinary_crossentropyloss function এর মাধ্যমে। - Visualization: শেষ 10টি টেস্ট ইমেজের আসল এবং পুনঃনির্মাণ ফলাফল (reconstructed images) দেখানো হয়েছে।
২. Deep Autoencoder মডেল:
Deep Autoencoder মডেলটি একাধিক hidden layers ব্যবহার করে। এটি deeper neural networks ব্যবহার করে, যা complex বা জটিল ডেটা প্রকৃতির জন্য আরও কার্যকরী হতে পারে।
কোড উদাহরণ:
from keras.models import Sequential
from keras.layers import Dense, Flatten, Reshape
# মডেল আর্কিটেকচার তৈরি
deep_autoencoder = Sequential()
# Encoder অংশ
deep_autoencoder.add(Dense(128, activation='relu', input_shape=(784,)))
deep_autoencoder.add(Dense(64, activation='relu'))
deep_autoencoder.add(Dense(32, activation='relu'))
# Latent space (বিচ্ছিন্ন স্তর)
deep_autoencoder.add(Dense(16, activation='relu'))
# Decoder অংশ
deep_autoencoder.add(Dense(32, activation='relu'))
deep_autoencoder.add(Dense(64, activation='relu'))
deep_autoencoder.add(Dense(128, activation='relu'))
deep_autoencoder.add(Dense(784, activation='sigmoid'))
# মডেল কম্পাইল করা
deep_autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
# মডেল ট্রেনিং
deep_autoencoder.fit(x_train, x_train, epochs=50, batch_size=256, shuffle=True, validation_data=(x_test, x_test))
# পুনঃনির্মাণের ফলাফল দেখানো
decoded_imgs = deep_autoencoder.predict(x_test)
# প্রথম 10টি ইমেজ দেখানো
n = 10
plt.figure(figsize=(20, 4))
for i in range(n):
ax = plt.subplot(2, n, i + 1)
plt.imshow(x_test[i].reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
ax = plt.subplot(2, n, i + 1 + n)
plt.imshow(decoded_imgs[i].reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()
কোড ব্যাখ্যা:
- ডিপ আর্কিটেকচার: এখানে বেশ কয়েকটি hidden layers (128, 64, 32, 16 ইউনিট) ব্যবহার করা হয়েছে যা জটিল বৈশিষ্ট্য শিখতে সহায়ক।
- Latent space: একাধিক hidden layers থাকলেও একটি ক্ষুদ্র latent layer (16 ইউনিট) রয়েছে, যা ডেটার সংকুচিত প্রতিনিধিত্ব তৈরি করে।
- Decoder: ডেটাকে পুনঃনির্মাণ করার জন্য decoder অংশে আরও hidden layers ব্যবহার করা হয়েছে, যা পুনরায় 784 ইউনিটের আউটপুট তৈরি করে।
GANs এর প্রয়োগ:
- Data Compression: ডেটা সংকুচিত করতে, কম্প্রেশন বা অডিও/ভিডিও ফাইল সংকুচিত করতে Autoencoders ব্যবহৃত হয়।
- Noise Reduction: ডেটা বা ছবির noise কমাতে ব্যবহৃত হয়।
- Dimensionality Reduction: Feature reduction বা ডেটার বৈশিষ্ট্য সংখ্যা কমাতে Autoencoders কার্যকরী।
উপসংহার:
- Simple Autoencoder হল একটি শ্যালো মডেল যা একটি hidden layer ব্যবহার করে, যা সাধারণত ডেটা কম্প্রেশন এবং ডেটার অপ্রয়োজনীয় তথ্য দূর করতে ব্যবহৃত হয়।
- Deep Autoencoder হল আরও গভীর মডেল যা অনেকগুলি hidden layer ব্যবহার করে, যা জটিল ডেটার জন্য আরও কার্যকরী এবং বিভিন্ন সমস্যা সমাধান করতে সহায়ক।
Read more