Loss Function এবং Optimizer সেটআপ

Theano দিয়ে Neural Network তৈরি - থিয়ানো (Theano) - Machine Learning

280

Loss Function এবং Optimizer ডিপ লার্নিং মডেল প্রশিক্ষণের জন্য অত্যন্ত গুরুত্বপূর্ণ উপাদান। Loss Function বা Cost Function হল একটি মেট্রিক যা মডেলের পূর্বাভাসের সাথে প্রকৃত আউটপুটের পার্থক্য পরিমাপ করে। Optimizer হল এমন একটি অ্যালগোরিদম যা মডেলের weights আপডেট করতে সাহায্য করে, যাতে মডেলটি সঠিক আউটপুট প্রদান করতে সক্ষম হয়।

থিয়ানোতে Loss Function এবং Optimizer সেটআপ করার জন্য নিচে ধাপে ধাপে গাইড দেওয়া হলো:

Loss Function:

Loss Function এমন একটি ফাংশন যা মডেলের আউটপুট এবং প্রকৃত আউটপুটের মধ্যে পার্থক্য নির্ধারণ করে। এটি মডেলের দক্ষতা পরিমাপ করে এবং আমাদের জানায় যে মডেলটি কতটা ভালো কাজ করছে।

ডিপ লার্নিংয়ে অনেক ধরনের লস ফাংশন ব্যবহৃত হয়, যেমন:

  • Mean Squared Error (MSE): রিগ্রেশন মডেলগুলির জন্য ব্যবহৃত হয়।
  • Categorical Crossentropy: মাল্টিক্লাস শ্রেণীবিভাগের জন্য ব্যবহৃত হয়।
  • Binary Crossentropy: বাইনারি শ্রেণীবিভাগের জন্য ব্যবহৃত হয়।

উদাহরণ: Mean Squared Error (MSE) Loss Function

import theano
import theano.tensor as T
import numpy as np

# ইনপুট টেনসর
y_true = T.dmatrix('y_true')  # প্রকৃত আউটপুট
y_pred = T.dmatrix('y_pred')  # পূর্বাভাস

# Mean Squared Error (MSE) লস ফাংশন
loss = T.mean((y_true - y_pred)**2)

# থিয়ানো ফাংশন তৈরি
loss_function = theano.function([y_true, y_pred], loss)

# কিছু ইনপুট প্রদান
y_true_data = np.array([[3, 5], [1, 2]])
y_pred_data = np.array([[2.5, 4.8], [1.1, 2.1]])

# লস হিসাব করা
loss_value = loss_function(y_true_data, y_pred_data)
print(f"Loss: {loss_value}")

এই উদাহরণে:

  • y_true প্রকৃত আউটপুট।
  • y_pred পূর্বাভাস।
  • Mean Squared Error (MSE) লস ফাংশনটি দুই টেনসরের মধ্যে পার্থক্যকে স্কোয়ার করে তাদের গড় বের করে।

Optimizer:

Optimizer হল একটি অ্যালগোরিদম যা মডেলের লস কমানোর জন্য তার weights আপডেট করে। ডিপ লার্নিংয়ে বিভিন্ন ধরনের অপটিমাইজার রয়েছে, যেমন:

  • Gradient Descent: একটি সাধারণ অপটিমাইজার যা ধীরে ধীরে লস কমানোর জন্য কাজ করে।
  • Stochastic Gradient Descent (SGD): একটি উন্নত অপটিমাইজার, যা প্রতি ব্যাচে শুধুমাত্র একটি র্যান্ডম স্যাম্পল ব্যবহার করে।
  • Adam: একটি জনপ্রিয় অপটিমাইজার যা momentum এবং adaptive learning rates ব্যবহার করে।

উদাহরণ: Stochastic Gradient Descent (SGD) Optimizer

import theano
import theano.tensor as T
import numpy as np

# ইনপুট টেনসর
x = T.dmatrix('x')  # ইনপুট
y = T.dmatrix('y')  # আউটপুট

# মডেল: লিনিয়ার রিগ্রেশন (weight এবং bias)
W = theano.shared(np.random.randn(2, 2))  # weights
b = theano.shared(np.random.randn(2))  # bias

# পূর্বাভাস ফাংশন
prediction = T.dot(x, W) + b

# Mean Squared Error (MSE) লস ফাংশন
loss = T.mean((y - prediction)**2)

# গ্র্যাডিয়েন্ট হিসাব করা
grad_W = T.grad(loss, W)
grad_b = T.grad(loss, b)

# স্টোকাস্টিক গ্র্যাডিয়েন্ট ডিসেন্ট (SGD) অপটিমাইজার
learning_rate = 0.01
updates = [(W, W - learning_rate * grad_W), (b, b - learning_rate * grad_b)]

# থিয়ানো ফাংশন তৈরি
train = theano.function([x, y], loss, updates=updates)

# কিছু ইনপুট এবং আউটপুট ডেটা
x_data = np.array([[1, 2], [3, 4]])
y_data = np.array([[5], [11]])

# ট্রেনিং চালানো
loss_value = train(x_data, y_data)
print(f"Loss after training: {loss_value}")

এখানে:

  • SGD অপটিমাইজার ব্যবহার করা হয়েছে যেখানে লসের গ্র্যাডিয়েন্টের সাথে learning rate ব্যবহার করে ওয়েট এবং বায়াস আপডেট করা হচ্ছে।

উন্নত অপটিমাইজার: Adam

Adam অপটিমাইজার হল একটি উন্নত অপটিমাইজার যা momentum এবং adaptive learning rates ব্যবহার করে, যা দ্রুত কনভার্জেন্স এবং লস কমানোর জন্য উপকারী।

উদাহরণ: Adam Optimizer

import theano
import theano.tensor as T
import numpy as np

# ইনপুট টেনসর
x = T.dmatrix('x')  # ইনপুট
y = T.dmatrix('y')  # আউটপুট

# মডেল: লিনিয়ার রিগ্রেশন (weight এবং bias)
W = theano.shared(np.random.randn(2, 2))  # weights
b = theano.shared(np.random.randn(2))  # bias

# পূর্বাভাস ফাংশন
prediction = T.dot(x, W) + b

# Mean Squared Error (MSE) লস ফাংশন
loss = T.mean((y - prediction)**2)

# গ্র্যাডিয়েন্ট হিসাব করা
grad_W = T.grad(loss, W)
grad_b = T.grad(loss, b)

# Adam অপটিমাইজার
learning_rate = 0.001
beta1 = 0.9
beta2 = 0.999
epsilon = 1e-8

m_W = theano.shared(np.zeros_like(W.get_value()))
v_W = theano.shared(np.zeros_like(W.get_value()))
m_b = theano.shared(np.zeros_like(b.get_value()))
v_b = theano.shared(np.zeros_like(b.get_value()))

m_W_new = beta1 * m_W + (1 - beta1) * grad_W
v_W_new = beta2 * v_W + (1 - beta2) * grad_W**2
m_b_new = beta1 * m_b + (1 - beta1) * grad_b
v_b_new = beta2 * v_b + (1 - beta2) * grad_b**2

m_W_hat = m_W_new / (1 - beta1)
v_W_hat = v_W_new / (1 - beta2)
m_b_hat = m_b_new / (1 - beta1)
v_b_hat = v_b_new / (1 - beta2)

updates = [
    (W, W - learning_rate * m_W_hat / (T.sqrt(v_W_hat) + epsilon)),
    (b, b - learning_rate * m_b_hat / (T.sqrt(v_b_hat) + epsilon)),
    (m_W, m_W_new),
    (v_W, v_W_new),
    (m_b, m_b_new),
    (v_b, v_b_new)
]

# থিয়ানো ফাংশন তৈরি
train = theano.function([x, y], loss, updates=updates)

# কিছু ইনপুট এবং আউটপুট ডেটা
x_data = np.array([[1, 2], [3, 4]])
y_data = np.array([[5], [11]])

# ট্রেনিং চালানো
loss_value = train(x_data, y_data)
print(f"Loss after training: {loss_value}")

এখানে:

  • Adam অপটিমাইজার ব্যবহার করা হয়েছে, যেখানে momentum এবং adaptive learning rate ব্যবহার করে ওয়েট ও বায়াস আপডেট করা হচ্ছে।

সারাংশ:

  • Loss Function মডেলের পারফরম্যান্স পরিমাপ করে এবং তা কমাতে অপটিমাইজারের কাজ শুরু হয়।
  • থিয়ানোতে MSE (Mean Squared Error) এবং Cross-Entropy এর মতো লস ফাংশনগুলো ব্যবহার করা যায়।
  • Optimizer মডেলের weights আপডেট করতে সাহায্য করে, এবং এতে SGD বা Adam ব্যবহার করা যায়, যা প্রশিক্ষণের গতি এবং দক্ষতা বৃদ্ধি করে।
Content added By
Promotion

Are you sure to start over?

Loading...