Transfer Learning প্রয়োগ করার জন্য আমরা একটি Pre-trained মডেল যেমন VGG16, ResNet, বা MobileNet ব্যবহার করতে পারি। এই উদাহরণে আমরা VGG16 মডেলকে বেস হিসেবে ব্যবহার করে কাস্টম ইমেজ ক্লাসিফিকেশন মডেল তৈরির প্রক্রিয়া দেখব।
উদাহরণ: VGG16 প্র-trained মডেল ব্যবহার করে কাস্টম ইমেজ ক্লাসিফিকেশন মডেল Training
আমরা নিম্নলিখিত ধাপগুলো অনুসরণ করব:
- Pre-trained VGG16 মডেল ইমপোর্ট করা এবং সেটআপ করা।
- VGG16 মডেলের কনভোলিউশনাল অংশ ব্যবহার করে নতুন ক্লাসিফিকেশন লেয়ার যোগ করা।
- মডেল 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 মডেল লোড করা
আমরা VGG16 মডেলটি ইমেজনেট ডেটাসেটে Pre-trained হিসেবে লোড করব এবং এর include_top=False দিয়ে শুধুমাত্র কনভোলিউশনাল লেয়ারগুলো নেবো।
# Pre-trained VGG16 মডেল লোড করা
vgg_base = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
ধাপ ৩: Custom মডেল তৈরি করা
এবার Pre-trained VGG16 মডেল থেকে ফিচার এক্সট্র্যাক্ট করে Custom মডেল তৈরি করা হবে। প্রথমে, VGG16-এর কনভোলিউশনাল লেয়ারগুলো ফ্রিজ করে রাখব এবং শেষে নতুন ক্লাসিফিকেশন লেয়ার যোগ করব।
# মডেল তৈরি করা
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 করা। পরে কিছু লেয়ার আনফ্রিজ করে ফাইন-টিউনিং।
- ডেটা অগমেন্টেশন ও প্রশিক্ষণ: ImageDataGenerator ব্যবহার করে ডেটা অগমেন্টেশনসহ Training করানো।
এই পদ্ধতিতে Transfer Learning ব্যবহার করে Custom মডেল Training করা যায়, যা কম ডেটাসেটে ভালো ফলাফল দিতে সক্ষম।
Read more