Transfer Learning এর মাধ্যমে একটি pretrained মডেলকে custom data এর উপর fine-tune (ফাইন টিউন) করা হলো একটি জনপ্রিয় পদ্ধতি, যার মাধ্যমে আপনি পূর্বে প্রশিক্ষিত একটি মডেলকে আপনার নির্দিষ্ট কাজের জন্য কাস্টমাইজ করতে পারেন। এটি বিশেষভাবে ডীপ লার্নিং এর ক্ষেত্রে কার্যকরী, যেখানে আপনার কাছে সীমিত ডেটা থাকে এবং আপনি পুরনো মডেলটি পুনরায় নতুন ডেটাসেটের জন্য আপডেট করতে চান।
কিছু মডেল যেমন VGG16, ResNet50, InceptionV3, Xception ইত্যাদি, যা ImageNet (বিশাল ইমেজ ডেটাসেট) এর উপর প্রশিক্ষিত, সেগুলোকে বিভিন্ন কাজের জন্য fine-tune করা যায়।
নিচে Keras এবং TensorFlow ব্যবহার করে pretrained মডেল ফাইন-টিউন করার বিস্তারিত প্রক্রিয়া দেওয়া হলো।
১. Pretrained মডেল লোড করা
প্রথমে, আপনাকে একটি pretrained মডেল লোড করতে হবে যা ImageNet বা অন্য কোন ডেটাসেটে প্রশিক্ষিত হয়েছে। আপনি VGG16, ResNet50, InceptionV3 ইত্যাদি মডেল থেকে যে কোন একটি বেছে নিতে পারেন।
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.models import Model
# VGG16 মডেল লোড করা (pre-trained)
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# base_model এর উপরের লেয়ারটি বাদ দিয়ে একটি কাস্টম মডেল তৈরি করা
x = base_model.output
x = GlobalAveragePooling2D()(x) # গ্লোবাল এভারেজ পুলিং
x = Dense(1024, activation='relu')(x) # ডেনস লেয়ার
predictions = Dense(10, activation='softmax')(x) # 10 শ্রেণি
# সম্পূর্ণ মডেল তৈরি
model = Model(inputs=base_model.input, outputs=predictions)
২. Pretrained মডেল এর লেয়ারগুলো ফ্রিজ করা
প্রথমে pretrained মডেলের লেয়ারগুলোকে ফ্রিজ (freeze) করা হয়, অর্থাৎ তারা ট্রেইন হবে না। এভাবে আপনি pretrained মডেলের সাধারণ ফিচার এক্সট্র্যাকশন ব্যবহার করবেন, এবং কেবলমাত্র কাস্টম লেয়ারগুলো ট্রেন হবে।
# base_model এর সমস্ত লেয়ার ফ্রিজ করা
for layer in base_model.layers:
layer.trainable = False
৩. মডেল কম্পাইল করা
এরপর আপনার মডেল কম্পাইল করতে হবে, যাতে এটি কাস্টম ডেটার উপর প্রশিক্ষণ নিতে পারে।
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
৪. ফাইন-টিউনিং (Fine-Tuning)
এখন আপনি ফাইন-টিউনিং শুরু করতে পারেন। আপনি base_model এর কিছু শেষ লেয়ার আনফ্রিজ (unfreeze) করতে পারেন এবং তাদের পুনরায় ট্রেইন করতে পারবেন। এটি করার মাধ্যমে আপনার মডেল আরও কাস্টম ডেটার জন্য উপযোগী হয়ে উঠবে।
# base_model এর কিছু লেয়ার আনফ্রিজ করা
for layer in base_model.layers[-4:]: # শেষ ৪টি লেয়ার
layer.trainable = True
৫. ফাইন-টিউনিংয়ের জন্য ট্রেনিং
এখন আপনার মডেল ফাইন-টিউন করার জন্য প্রস্তুত। আপনি কাস্টম ডেটাসেট ব্যবহার করে মডেলটি প্রশিক্ষণ শুরু করতে পারেন। এর জন্য আপনাকে আপনার ডেটাসেটের জন্য data augmentation এবং batch generator ব্যবহার করতে হবে।
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# ডেটা অগমেন্টেশন
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True
)
test_datagen = ImageDataGenerator(rescale=1./255)
# ট্রেনিং ডেটাসেট লোড করা
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(224, 224),
batch_size=32,
class_mode='categorical'
)
# ভ্যালিডেশন ডেটাসেট লোড করা
validation_generator = test_datagen.flow_from_directory(
'data/validation',
target_size=(224, 224),
batch_size=32,
class_mode='categorical'
)
# মডেল প্রশিক্ষণ
model.fit(
train_generator,
steps_per_epoch=100, # প্রতি এপোকের জন্য স্টেপ সংখ্যা
epochs=10,
validation_data=validation_generator,
validation_steps=50 # ভ্যালিডেশন স্টেপ সংখ্যা
)
৬. ফাইন-টিউনিং শেষে মডেল সংরক্ষণ করা
ফাইন-টিউনিং শেষ হলে, আপনি মডেলটি সংরক্ষণ করতে পারেন:
model.save('fine_tuned_model.h5')
এটি একটি .h5 ফাইল হিসেবে মডেলটি সংরক্ষণ করবে, যাতে ভবিষ্যতে পুনরায় ব্যবহার করা যায়।
৭. ফাইন-টিউনিং করা মডেল ব্যবহার করে প্রেডিকশন
ফাইন-টিউনিং করা মডেল ব্যবহার করে আপনি নতুন ডেটার উপর প্রেডিকশন করতে পারেন:
from tensorflow.keras.preprocessing import image
import numpy as np
# নতুন ইমেজ লোড করা
img = image.load_img('data/test/sample_image.jpg', target_size=(224, 224))
# ইমেজকে numpy অ্যারে তে কনভার্ট করা
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
# প্রেডিকশন
prediction = model.predict(img_array)
print(prediction)
সারাংশ
Fine-tuning হল pretrained মডেলগুলির শক্তিশালী বৈশিষ্ট্য ব্যবহার করে কাস্টম ডেটাসেটে মডেল প্রশিক্ষণ করার প্রক্রিয়া। আপনি pretrained মডেলের প্রথম কিছু লেয়ার ফ্রিজ করে, এবং শেষে কাস্টম লেয়ার যোগ করে আপনার নিজস্ব কাজের জন্য মডেলটি কাস্টমাইজ করতে পারেন। Keras/TensorFlow এ এটি খুবই সহজ এবং কার্যকরী পদ্ধতি, যা কম ডেটা এবং কম সময়ের মধ্যে উন্নত ফলাফল প্রদান করে।
Read more