Theano দিয়ে Autoencoders মডেল তৈরি করার জন্য, প্রথমে এটি বোঝা গুরুত্বপূর্ণ যে Autoencoder একটি নিউরাল নেটওয়ার্ক আর্কিটেকচার যা ডেটা সংকোচন এবং ডেটা পুনরুদ্ধার (data reconstruction) এর জন্য ব্যবহৃত হয়। এটি এনকোডার (encoder) এবং ডিকোডার (decoder) নামক দুটি অংশে বিভক্ত, যেখানে এনকোডার ইনপুট ডেটা থেকে কম আকারের বৈশিষ্ট্য বের করে এবং ডিকোডার সেই বৈশিষ্ট্য থেকে পুনরুদ্ধার করা আউটপুট তৈরি করে।
এখানে Theano ব্যবহার করে Autoencoder মডেল তৈরি করার জন্য একটি সিম্পল গাইড দেয়া হলো:
১. প্রয়োজনীয় প্যাকেজ ইনস্টলেশন
প্রথমে Theano এবং অন্যান্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করতে হবে। যদি আপনি এগুলি ইনস্টল না করে থাকেন, তবে নিচের কমান্ড ব্যবহার করতে পারেন:
pip install theano numpy
২. Autoencoder মডেল তৈরি
এখন, Theano দিয়ে একটি সিম্পল Autoencoder তৈরি করবো। এটি একটি সিম্পল ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক হবে যেখানে আমরা ইনপুট ডেটা সংকুচিত করতে এবং পরে তা পুনরুদ্ধার করতে চাই।
import numpy as np
import theano
import theano.tensor as T
from theano import function
# সিম্পল Autoencoder মডেল
# ইনপুট ডেটা এবং আউটপুট ডেটা সাইজ
input_size = 784 # উদাহরণস্বরূপ MNIST ডেটাসেটের 28x28 পিক্সেল চিত্র
hidden_size = 64 # লুকানো লেয়ারের আকার
output_size = input_size # আউটপুট সাইজ ইনপুট সাইজের সমান হবে
# ইনপুট ভেরিয়েবল (Theano tensor)
X = T.dmatrix('X') # ইনপুট
# ওজন এবং বায়াসের জন্য পরামিতি
W1 = theano.shared(np.random.randn(input_size, hidden_size) * 0.01, name='W1') # এনকোডারের জন্য ওজন
b1 = theano.shared(np.zeros(hidden_size), name='b1') # এনকোডারের জন্য বায়াস
W2 = theano.shared(np.random.randn(hidden_size, output_size) * 0.01, name='W2') # ডিকোডারের জন্য ওজন
b2 = theano.shared(np.zeros(output_size), name='b2') # ডিকোডারের জন্য বায়াস
# এনকোডার (Encoder)
encoded = T.nnet.sigmoid(T.dot(X, W1) + b1) # সিগময়েড একটিভেশন ফাংশন
# ডিকোডার (Decoder)
decoded = T.nnet.sigmoid(T.dot(encoded, W2) + b2) # সিগময়েড একটিভেশন ফাংশন
# লস ফাংশন (Loss function: Mean Squared Error)
loss = T.mean((X - decoded) ** 2)
# গ্রেডিয়েন্ট কম্পিউট করা
params = [W1, b1, W2, b2]
grads = T.grad(loss, params)
# আপডেট করা (Stochastic Gradient Descent)
learning_rate = 0.01
updates = [(param, param - learning_rate * grad) for param, grad in zip(params, grads)]
# Theano ফাংশন তৈরি করা
train = theano.function(
inputs=[X],
outputs=loss,
updates=updates
)
# ইনপুট ডেটা তৈরি (যেমন, MNIST ডেটাসেট)
# এখানে আমরা শুধু একটি উদাহরণ ডেটা তৈরি করছি, এটি আসল ডেটার পরিবর্তে
train_data = np.random.randn(100, input_size) # 100 টা উদাহরণ
# ট্রেনিং করা (এখানে শুধু একবার ট্রেনিং দেখানো হয়েছে, সাধারণত এটা অনেক ইটারেশন চলবে)
for epoch in range(1000):
train_loss = train(train_data)
if epoch % 100 == 0:
print(f"Epoch {epoch}, Loss: {train_loss}")
৩. ব্যাখ্যা:
- ইনপুট এবং আউটপুট:
input_size = 784(যেহেতু MNIST ডেটাসেটে প্রতিটি ছবি 28x28 পিক্সেলের হয়, 28 * 28 = 784)। আপনি যদি অন্য ডেটাসেট ব্যবহার করেন, তাহলে এই মানটি পরিবর্তন করতে হবে।hidden_size = 64হলো লুকানো স্তরের নিউরনের সংখ্যা।
- ওজন (Weights) এবং বায়াস (Bias):
W1,b1,W2, এবংb2হলো ওজন এবং বায়াস যা যথাক্রমে এনকোডার এবং ডিকোডারের জন্য ব্যবহৃত হয়। এগুলিকে Theano.shared ব্যবহার করে শেয়ার করা মান হিসাবে ঘোষণা করা হয়েছে।
- এনকোডার (Encoder):
- ইনপুট ডেটা (
X) এর সাথেW1ওb1যোগ করে একটি লিনিয়ার ট্রান্সফর্ম তৈরি করা হয় এবং তারপরে সিগময়েড ফাংশন প্রয়োগ করা হয়।
- ইনপুট ডেটা (
- ডিকোডার (Decoder):
- এনকোডার থেকে প্রাপ্ত আউটপুট (
encoded) এর সাথেW2ওb2যোগ করে একটি লিনিয়ার ট্রান্সফর্ম তৈরি করা হয় এবং তারপরে সিগময়েড ফাংশন প্রয়োগ করা হয়।
- এনকোডার থেকে প্রাপ্ত আউটপুট (
- লস ফাংশন (Loss Function):
- আউটপুট এবং ইনপুটের মধ্যে মানের তফাৎ নির্ধারণ করতে মিন স্কোয়ারড এরর (MSE) ব্যবহার করা হয়েছে।
- গ্রেডিয়েন্ট কম্পিউটেশন এবং আপডেট:
- Theano এর
T.gradফাংশন ব্যবহার করে গ্রেডিয়েন্ট হিসাব করা হয়েছে এবং স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট (SGD) অপটিমাইজেশন পদ্ধতি ব্যবহার করে ওজন আপডেট করা হয়েছে।
- Theano এর
৪. ট্রেনিং:
- আপনি
trainফাংশন ব্যবহার করে Autoencoder মডেলটি প্রশিক্ষণ (train) করতে পারেন। train_dataএ আপনি আপনার ডেটাসেটের মান ব্যবহার করতে পারেন, যা MNIST বা অন্য কোনো ডেটাসেট হতে পারে।
৫. ফলাফল:
- ট্রেনিং চলাকালে লস (loss) কমে যাবে, যা ইঙ্গিত দেয় যে মডেলটি সঠিকভাবে শিখছে এবং ডেটার সংকোচন এবং পুনরুদ্ধারে সফল হচ্ছে।
সারাংশ:
উপরের কোডটি Theano দিয়ে একটি সিম্পল Autoencoder মডেল তৈরি করার জন্য ব্যবহার করা যেতে পারে। এটি এনকোডার এবং ডিকোডার ব্যবহার করে ইনপুট ডেটা সংকুচিত করে এবং পুনরুদ্ধার করে, এবং স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট (SGD) ব্যবহার করে মডেলটি প্রশিক্ষিত হয়।
Read more