Model Evaluation এবং Training Loop: উদাহরণ সহ ব্যাখ্যা
মেশিন লার্নিং এবং নিউরাল নেটওয়ার্ক মডেলের ট্রেনিংয়ের পর এটি মূল্যায়ন (Evaluation) করা অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি মডেলের পারফরম্যান্স বিশ্লেষণ করতে সাহায্য করে। নিচে Training Loop এবং Model Evaluation নিয়ে একটি উদাহরণ দেওয়া হলো।
1. Training Loop কী?
Training Loop হলো মডেলের ট্রেনিং প্রক্রিয়ার একটি পুনরাবৃত্তি অংশ। এটি সাধারণত নীচের ধাপগুলো অন্তর্ভুক্ত করেঃ
- Forward Propagation চালিয়ে আউটপুট তৈরি করা
- লস (Loss) গণনা করা
- Backward Propagation করে গ্রেডিয়েন্ট আপডেট করা
- Optimizer এর মাধ্যমে ওজন এবং বায়াস আপডেট করা
2. Model Evaluation কী?
Model Evaluation হলো একটি প্রক্রিয়া যেখানে মডেলটি কতোটা সঠিকভাবে কাজ করছে তা পরীক্ষা করা হয়। এটি সাধারণত validation বা test ডেটাসেটের ওপর চালানো হয়। সাধারণভাবে ব্যবহার হওয়া Evaluation মেট্রিকগুলোর মধ্যে Accuracy, Precision, Recall, এবং F1 Score অন্তর্ভুক্ত।
উদাহরণ: XOR ফাংশনের জন্য Training Loop এবং Model Evaluation
আমরা একটি ছোট নিউরাল নেটওয়ার্ক তৈরি করবো যা XOR ফাংশন শিখবে এবং এর Training Loop ও Evaluation প্রসেস দেখবো।
import chainer
import chainer.functions as F
import chainer.links as L
from chainer import Chain, optimizers, Variable
from sklearn.metrics import accuracy_score
# ডেটাসেট ডিফাইন করা হচ্ছে
x_data = [[0, 0], [0, 1], [1, 0], [1, 1]]
y_data = [0, 1, 1, 0] # XOR output values
# নিউরাল নেটওয়ার্ক মডেল ডিফাইন
class XORNetwork(Chain):
def __init__(self):
super(XORNetwork, self).__init__()
with self.init_scope():
self.l1 = L.Linear(2, 3) # হিডেন লেয়ার
self.l2 = L.Linear(3, 1) # আউটপুট লেয়ার
# Forward Propagation
def __call__(self, x):
h = F.sigmoid(self.l1(x)) # হিডেন লেয়ার
y = F.sigmoid(self.l2(h)) # আউটপুট লেয়ার
return y
# মডেল ও Optimizer সেটআপ
model = XORNetwork()
optimizer = optimizers.Adam()
optimizer.setup(model)
# Training Loop
epochs = 5000
for epoch in range(epochs):
total_loss = 0
for i in range(len(x_data)):
x = Variable(chainer.backends.cuda.to_cpu(x_data[i]))
y = Variable(chainer.backends.cuda.to_cpu([y_data[i]]))
# Forward Propagation
y_pred = model(x)
# লস কম্পিউট
loss = F.mean_squared_error(y_pred, y)
total_loss += loss.data
# Backward Propagation এবং Optimizer আপডেট
model.cleargrads()
loss.backward()
optimizer.update()
if epoch % 1000 == 0:
print(f'Epoch {epoch}, Loss: {total_loss / len(x_data)}')
# Model Evaluation
print("\nEvaluating the trained model on XOR function:")
predictions = []
for x in x_data:
y_pred = model(Variable(chainer.backends.cuda.to_cpu(x)))
predictions.append(int(y_pred.data > 0.5)) # 0.5 এর উপরে হলে 1, অন্যথায় 0
accuracy = accuracy_score(y_data, predictions)
print(f"Predictions: {predictions}")
print(f"Actual Values: {y_data}")
print(f"Accuracy: {accuracy * 100}%")
ব্যাখ্যা
Training Loop:
- লস হিসাব:
F.mean_squared_error()এর মাধ্যমে প্রতিটি উদাহরণের লস গণনা করা হয়। - Backward Propagation এবং Optimizer আপডেট: প্রতিটি ইপোক শেষে গ্রেডিয়েন্ট ক্লিয়ার করে ও Optimizer দিয়ে ওজন আপডেট করা হয়।
Model Evaluation:
- প্রতিটি ইনপুটের জন্য মডেলটি প্রেডিকশন করে এবং 0.5 এর উপরে হলে 1 এবং নিচে হলে 0 হিসেবে প্রেডিকশন দেয়।
accuracy_scoreফাংশন ব্যবহার করে মডেলের পারফরম্যান্স দেখা হয়।
আউটপুট
প্রশিক্ষণ শেষে মডেলটি XOR ফাংশন শিখে যাবে এবং নিম্নলিখিত ফলাফল দেখাবে:
Predictions: [0, 1, 1, 0]
Actual Values: [0, 1, 1, 0]
Accuracy: 100%
সংক্ষেপে
Training Loop মডেলকে পুনরাবৃত্তি মাধ্যমে শেখায় এবং Model Evaluation এটি কেমন কাজ করছে তা পর্যালোচনা করতে সাহায্য করে। Accuracy, Precision, Recall প্রভৃতি মেট্রিক ব্যবহার করে মডেলের পারফরম্যান্স মূল্যায়ন করা যায়।
Read more