Pre-trained মডেল ব্যবহার করে Custom মডেল Training করার পদ্ধতিকে Transfer Learning বলা হয়, যেখানে আমরা একটি Pre-trained মডেল (যেমন VGG, ResNet, BERT) ব্যবহার করে নতুন ডেটাসেটে প্রশিক্ষণ দেই। এটি মূলত দুই ধাপে কাজ করে: Pre-trained মডেল থেকে ফিচার এক্সট্র্যাকশন এবং ফাইন-টিউনিং।
নিচে উদাহরণসহ Custom মডেল Training-এর জন্য ধাপে ধাপে গাইড দেওয়া হলো।
ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইমপোর্ট করা
import numpy as np
from tensorflow.keras.applications import VGG16
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import Adam
ধাপ ২: Pre-trained মডেল লোড করা
আমরা VGG16 মডেলকে Pre-trained মডেল হিসেবে ব্যবহার করব, যেটি ইমেজনেট ডেটাসেটে প্রশিক্ষিত। আমরা শুধু এর কনভোলিউশনাল লেয়ারগুলো নেব এবং শেষের ক্লাসিফিকেশন লেয়ার বাদ দেব।
# Pre-trained VGG16 মডেল লোড করা
vgg_base = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
ধাপ ৩: Custom মডেল তৈরি করা
Pre-trained মডেল থেকে ফিচারগুলো এক্সট্র্যাক্ট করে Custom মডেলে ফাইন-টিউনিং করব। প্রথমে, VGG16-এর কনভোলিউশনাল লেয়ারগুলো ফ্রিজ (freeze) করে রাখব, যেন এগুলো পুনরায় প্রশিক্ষিত না হয়।
# মডেল তৈরি করা
model = Sequential()
model.add(vgg_base) # Pre-trained VGG16 মডেলকে বেস হিসেবে ব্যবহার করা
model.add(Flatten()) # ফিচারগুলোকে সমতল করা
model.add(Dense(256, activation='relu')) # নতুন ডেন্স লেয়ার
model.add(Dense(10, activation='softmax')) # আউটপুট লেয়ার (১০ ক্যাটেগরি ক্লাসিফিকেশন)
# Pre-trained লেয়ারগুলো ফ্রিজ করা
for layer in vgg_base.layers:
layer.trainable = False
ধাপ ৪: মডেল কম্পাইল করা
# মডেল কম্পাইল করা
model.compile(optimizer=Adam(learning_rate=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
ধাপ ৫: ডেটা প্রস্তুত করা
আমাদের ডেটাসেট ImageDataGenerator ব্যবহার করে প্রস্তুত করা যেতে পারে, যা ডেটাকে রিয়েল-টাইমে প্রসেস করে মডেলে পাঠাবে।
# ডেটা প্রসেসিং
train_datagen = ImageDataGenerator(rescale=1.0/255.0, rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True)
train_generator = train_datagen.flow_from_directory('path_to_train_data', target_size=(224, 224), batch_size=32, class_mode='categorical')
ধাপ ৬: মডেল Training করা
# মডেল Training করা
model.fit(train_generator, epochs=10)
ধাপ ৭: মডেল ফাইন-টিউনিং (ঐচ্ছিক)
ফাইন-টিউনিংয়ে আমরা Pre-trained মডেলের শেষ কয়েকটি লেয়ার আনফ্রিজ করে রাখব এবং এগুলোকে আমাদের নতুন ডেটাসেটের সাথে পুনরায় প্রশিক্ষিত করব। এটি মডেলের পারফরম্যান্স আরও উন্নত করতে সহায়ক হতে পারে
# কিছু লেয়ার আনফ্রিজ করা
for layer in vgg_base.layers[-4:]: # শেষের ৪টি লেয়ার আনফ্রিজ
layer.trainable = True
# কম্পাইল করা (কম লার্নিং রেট ব্যবহার করতে হবে)
model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])
# পুনরায় Training
model.fit(train_generator, epochs=5)
পুরো প্রক্রিয়ার সারাংশ
- Pre-trained মডেল ব্যবহার করা: VGG16 বা অন্যান্য Pre-trained মডেলকে বেস মডেল হিসেবে ব্যবহার।
- Custom লেয়ার যোগ করা: Pre-trained মডেলের আউটপুট ফিচার নিয়ে কিছু ডেন্স লেয়ার যোগ করা।
- ফ্রিজ ও আনফ্রিজ করা: প্রথমে Pre-trained মডেলের সব লেয়ার ফ্রিজ করে Training করা। প্রয়োজন হলে কিছু লেয়ার আনফ্রিজ করে পুনরায় ফাইন-টিউনিং করা।
- ডেটা অগমেন্টেশন ও প্রশিক্ষণ: ডেটা অগমেন্টেশনসহ Training করানো, যা মডেলের জেনারালাইজেশনের জন্য সহায়ক।
এই পদ্ধতিতে, Pre-trained মডেল ব্যবহার করে Custom মডেল তৈরি ও Training করতে পারবেন, যা কম ডেটাসেটে ভালো পারফরম্যান্স দিতে সক্ষম।
Read more