Keras-এ Callbacks হল সেই ফাংশন বা অবজেক্ট যা প্রশিক্ষণ চলাকালীন বিভিন্ন ইভেন্টের সময় কার্যকর হয়। উদাহরণস্বরূপ, মডেল প্রশিক্ষণের সময় epoch এর শেষে, batch প্রসেসিংয়ের শেষে বা validation এর সময়। Custom callbacks তৈরি করা হয় যখন আমাদের প্রয়োজন হয় কোনো নির্দিষ্ট কাজ করতে প্রশিক্ষণ চলাকালীন, যেমন, এক্সপেরিমেন্টাল মেট্রিক্স রেকর্ড করা, মডেল সংরক্ষণ করা বা early stopping কাস্টমাইজ করা।
Keras-এ Callback ক্লাসের মাধ্যমে কাস্টম কলব্যাক তৈরি করা যায়। এটি একটি বেস ক্লাস, যা মডেলের প্রশিক্ষণের বিভিন্ন স্টেজে ক্রিয়াকলাপ চালানোর জন্য মেথড সরবরাহ করে।
Custom Callback তৈরি করা
১. Custom Callback এর বেসিক স্ট্রাকচার
Custom Callback তৈরি করতে, tf.keras.callbacks.Callback ক্লাসটি ইনহেরিট করতে হয় এবং এর মধ্যে কিছু মেথডও কাস্টমাইজ করা হয়। কিছু গুরুত্বপূর্ণ মেথড যা কাস্টম কলব্যাক তৈরি করার সময় ব্যবহার করা হয়:
on_epoch_end(epoch, logs=None): প্রতি epoch শেষে কাজ করা।on_batch_end(batch, logs=None): প্রতি batch শেষে কাজ করা।on_train_end(logs=None): প্রশিক্ষণ শেষ হলে কাজ করা।on_train_begin(logs=None): প্রশিক্ষণ শুরু হলে কাজ করা।
এখানে একটি উদাহরণ দেওয়া হলো, যেখানে একটি কাস্টম কলব্যাক তৈরি করা হয়েছে যা epoch এর শেষে মডেলটির লস এবং অ্যাকিউরেসি প্রিন্ট করে:
import tensorflow as tf
# Custom Callback তৈরি করা
class CustomCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
# epoch শেষে লস এবং অ্যাকিউরেসি প্রিন্ট করা
print(f"Epoch {epoch+1}: loss = {logs['loss']}, accuracy = {logs['accuracy']}")
# মডেল তৈরি করা
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
# মডেল কম্পাইল করা
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# মডেল ট্রেনিং
model.fit(x_train, y_train, epochs=5, callbacks=[CustomCallback()])
এই কাস্টম কলব্যাকটি প্রতি epoch এর শেষে লস এবং অ্যাকিউরেসি প্রিন্ট করবে। এখানে, logs একটি dictionary, যেখানে মডেলের পারফরম্যান্সের বিভিন্ন তথ্য থাকে, যেমন loss, accuracy, val_loss, val_accuracy ইত্যাদি।
২. Custom Callback দিয়ে Early Stopping কাস্টমাইজ করা
Keras-এর built-in EarlyStopping কলব্যাক সাধারণত প্রশিক্ষণ চলাকালীন মডেলের পারফরম্যান্স পর্যবেক্ষণ করে, এবং যদি নির্দিষ্ট সংখ্যক epochs পরে উন্নতি না হয়, তাহলে প্রশিক্ষণ বন্ধ করে দেয়। আমরা যদি Custom EarlyStopping কলব্যাক তৈরি করতে চাই, তাহলে নিচের মতো করতে পারি:
class CustomEarlyStopping(tf.keras.callbacks.Callback):
def __init__(self, patience=3):
super().__init__()
self.patience = patience
self.best_loss = float('inf')
self.wait = 0
def on_epoch_end(self, epoch, logs=None):
current_loss = logs.get('loss')
if current_loss < self.best_loss:
self.best_loss = current_loss
self.wait = 0
else:
self.wait += 1
if self.wait >= self.patience:
print("Early stopping triggered!")
self.model.stop_training = True
# মডেল কম্পাইল এবং ট্রেনিং
model.fit(x_train, y_train, epochs=20, callbacks=[CustomEarlyStopping(patience=3)])
এই কাস্টম কলব্যাকটি একটি patience প্যারামিটার গ্রহণ করে, যা নির্ধারণ করে যে কতগুলো epochs মডেলের পারফরম্যান্সের কোনো উন্নতি না ঘটলে প্রশিক্ষণ বন্ধ করা হবে।
৩. Custom Callback দিয়ে মডেল সেভ করা
কাস্টম কলব্যাক ব্যবহার করে আপনি প্রশিক্ষণ চলাকালীন মডেল সংরক্ষণও করতে পারেন। এখানে একটি উদাহরণ দেওয়া হলো যেখানে আমরা প্রতি epoch শেষে মডেল সেভ করব:
class SaveModelCallback(tf.keras.callbacks.Callback):
def __init__(self, save_dir):
super().__init__()
self.save_dir = save_dir
def on_epoch_end(self, epoch, logs=None):
# epoch শেষে মডেল সেভ করা
model.save(f"{self.save_dir}/model_epoch_{epoch+1}.h5")
print(f"Model saved at epoch {epoch+1}")
# মডেল কম্পাইল এবং ট্রেনিং
save_callback = SaveModelCallback(save_dir="models")
model.fit(x_train, y_train, epochs=10, callbacks=[save_callback])
এখানে, SaveModelCallback প্রতি epoch শেষে মডেলটি সংরক্ষণ করবে।
৪. Custom Callback ব্যবহার করে মডেল লগিং
কাস্টম কলব্যাক ব্যবহার করে আপনি প্রশিক্ষণের বিভিন্ন পর্যায়ে মডেলের logs বা metrics ট্র্যাকও করতে পারেন, যেমন একটি নির্দিষ্ট মেট্রিকের উপর ভিত্তি করে লোগিং করা:
class LoggingCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
# মডেল লস এবং অ্যাকিউরেসি লগ করা
print(f"Epoch {epoch+1} - loss: {logs['loss']} - accuracy: {logs['accuracy']}")
# মডেল ট্রেনিং
model.fit(x_train, y_train, epochs=5, callbacks=[LoggingCallback()])
৫. Callback ব্যবহার করার উপকারিতা
- Dynamic Training Adjustments: কাস্টম কলব্যাক ব্যবহার করে আপনি প্রশিক্ষণ চলাকালীন মডেল আপডেট বা পরিবর্তন করতে পারেন, যেমন learning rate কমানো বা early stopping চালানো।
- Model Checkpoints: মডেল সেভ করার জন্য কলব্যাক ব্যবহার করা হয়, যাতে প্রশিক্ষণের মধ্যে ভাল মডেলগুলো সংরক্ষণ করা যায়।
- Logs and Monitoring: কাস্টম কলব্যাক ব্যবহার করে আপনি মডেলের পারফরম্যান্স লগ এবং পর্যবেক্ষণ করতে পারেন, যা মডেল অপ্টিমাইজেশনের জন্য সহায়ক।
- Adapt to Requirements: আপনার নিজের বিশেষ প্রয়োজনীয়তার জন্য কাস্টম কলব্যাক তৈরি করা যায়, যেমন উন্নত learning rate schedules, metric-based callbacks, বা complex validation conditions।
সারাংশ
Keras-এ Custom Callbacks তৈরি করার মাধ্যমে প্রশিক্ষণ প্রক্রিয়া আরও নমনীয় এবং কাস্টমাইজযোগ্য করা যায়। আপনি প্রশিক্ষণের বিভিন্ন ইভেন্টে যেমন epoch_end, batch_end, train_end ইত্যাদিতে নির্দিষ্ট কাজ করতে পারেন। আপনি early stopping, model saving, logs tracking এবং অন্যান্য অনেক কাস্টম কার্যকারিতা প্রয়োগ করতে পারেন। Keras এর Callback ক্লাসটি এই কাজগুলির জন্য একটি শক্তিশালী এবং নমনীয় কাঠামো প্রদান করে।
Read more