Simple Autoencoder একটি নিউরাল নেটওয়ার্ক আর্কিটেকচার যা মূলত ডেটা সংকোচন এবং ডেটার বৈশিষ্ট্যসমূহ শেখার জন্য ব্যবহৃত হয়। এটি দুটি প্রধান অংশে বিভক্ত:
- এনকোডার (Encoder): ইনপুট ডেটাকে একটি সংকুচিত বা কম-ডাইমেনশনাল রেপ্রেজেন্টেশনে রূপান্তরিত করে।
- ডিকোডার (Decoder): সংকুচিত রেপ্রেজেন্টেশন থেকে ইনপুট ডেটার পুনর্নির্মাণ করে।
এটি সাধারণত ডেনোসিং বা ফিচার এক্সট্রাকশন এর জন্য ব্যবহার হয়, এবং একে ইমেজ বা টেক্সট ডেটা সংকোচন এবং পুনর্গঠন করতে ব্যবহৃত করা হয়।
নিচে একটি Simple Autoencoder মডেল তৈরি করার জন্য TensorFlow/Keras ব্যবহার করে একটি উদাহরণ দেওয়া হলো:
প্রয়োজনীয় লাইব্রেরি ইনস্টলেশন
pip install tensorflow
কোড উদাহরণ
import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
# 1. ডেটাসেট লোড করা (এখানে MNIST ডেটাসেট ব্যবহার করছি)
(x_train, _), (x_test, _) = tf.keras.datasets.mnist.load_data()
# 2. ডেটা প্রি-প্রসেসিং: রিসাইজ এবং নরমালাইজেশন
x_train = np.reshape(x_train, (x_train.shape[0], 28, 28, 1)) / 255.0
x_test = np.reshape(x_test, (x_test.shape[0], 28, 28, 1)) / 255.0
# 3. Autoencoder মডেল তৈরি করা
# Encoder
input_img = layers.Input(shape=(28, 28, 1)) # ইনপুট চিত্র
x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(64, (3, 3), activation='relu', padding='same')(x)
encoded = layers.MaxPooling2D((2, 2), padding='same')(x)
# Decoder
x = layers.Conv2D(64, (3, 3), activation='relu', padding='same')(encoded)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = layers.UpSampling2D((2, 2))(x)
decoded = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
# Autoencoder মডেল
autoencoder = models.Model(input_img, decoded)
# Encoder মডেল (ফিচার এক্সট্রাকশন)
encoder = models.Model(input_img, encoded)
# Decoder মডেল (ডিকোডিং)
encoded_input = layers.Input(shape=(7, 7, 64)) # এন্ট্রির আউটপুট আকার
decoder_layer = autoencoder.layers[-4](encoded_input)
decoder_layer = autoencoder.layers[-3](decoder_layer)
decoder_layer = autoencoder.layers[-2](decoder_layer)
decoder_layer = autoencoder.layers[-1](decoder_layer)
decoder = models.Model(encoded_input, decoder_layer)
# 4. মডেল কম্পাইল করা
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
# 5. মডেল প্রশিক্ষণ
autoencoder.fit(x_train, x_train,
epochs=50,
batch_size=128,
validation_data=(x_test, x_test))
# 6. কিছু চিত্র পুনর্গঠন (Reconstruction)
encoded_imgs = encoder.predict(x_test)
decoded_imgs = decoder.predict(encoded_imgs)
# 7. ফলাফল প্রদর্শন
n = 10 # প্রদর্শনের জন্য 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 পিক্সেলের হ্যান্ডরিটেন ডিজিট ইমেজ নিয়ে গঠিত।
- ডেটা প্রি-প্রসেসিং: ডেটা রিসাইজ এবং নরমালাইজ করা হয়েছে যাতে পিক্সেল ভ্যালু 0 থেকে 1 এর মধ্যে চলে আসে।
- Autoencoder মডেল:
- Encoder অংশে কনভোলিউশনাল লেয়ার এবং ম্যাক্স পুলিং লেয়ার দিয়ে ডেটা সংকুচিত করা হয়েছে।
- Decoder অংশে ডেটা পুনরায় পুনর্গঠন করতে কনভোলিউশনাল এবং আপস্যাম্পলিং লেয়ার ব্যবহার করা হয়েছে।
- মডেল প্রশিক্ষণ: মডেলটি 50টি epoch পর্যন্ত প্রশিক্ষিত হয় এবং ট্রেনিং ডেটা ও টেস্ট ডেটা দিয়ে পরীক্ষা করা হয়।
- ফলাফল প্রদর্শন: ইনপুট এবং পুনর্গঠিত চিত্রের তুলনা করা হয়।
সারাংশ:
এটি একটি সিম্পল অটোএনকোডার মডেল, যা MNIST ডেটাসেটের ইমেজগুলোকে সংকুচিত করে এবং পরে সেগুলিকে পুনর্গঠন করে। এটি ইমেজ কম্প্রেশন এবং ফিচার এক্সট্রাকশন দেখানোর জন্য একটি সাধারণ উদাহরণ।
Content added By
Read more