Pretrained মডেল ফাইন-টিউন করা

Transfer Learning এবং Pretrained মডেল - কেরাস ডিপ লার্নিং (Deep Learning with Keras) - Machine Learning

440

Pretrained মডেল ফাইন-টিউনিং হল একটি শক্তিশালী কৌশল যা ডীপ লার্নিংয়ের ক্ষেত্রে ব্যবহার করা হয়, বিশেষ করে চিত্র শ্রেণীকরণ এবং অন্যান্য কম্পিউটার ভিশন অ্যাপ্লিকেশনে। এই প্রক্রিয়ায়, আপনি একটি আগে থেকে প্রশিক্ষিত মডেলকে গ্রহণ করেন এবং সেটিকে আপনার নিজস্ব ডেটাসেটের জন্য কাস্টমাইজ বা ফাইন-টিউন করেন। এটি মূলত transfer learning এর অংশ, যেখানে একটি মডেল একটি টাস্কে প্রশিক্ষিত হয় এবং পরে এটি অন্য টাস্কে ব্যবহার করা হয়।

Pretrained মডেলগুলি সাধারণত বিশাল ডেটাসেটের ওপর প্রশিক্ষিত থাকে (যেমন, ImageNet), যা অত্যন্ত সাধারণ বৈশিষ্ট্য এবং প্যাটার্ন শিখতে সহায়ক। আপনি তখন শুধুমাত্র শেষ লেয়ারটি পরিবর্তন করে এবং মডেলটি আপনার ডেটাসেটের জন্য পুনরায় প্রশিক্ষণ (fine-tuning) করতে পারেন।

Pretrained মডেল ফাইন-টিউন করার ধাপ

১. Pretrained মডেল লোড করা

Keras এবং TensorFlow pretrained মডেলগুলির একটি ভাল সেলেকশন প্রদান করে, যেমন VGG16, ResNet50, InceptionV3, MobileNetV2, ইত্যাদি। আপনি এগুলো খুব সহজে লোড করতে পারেন এবং এগুলোর শেষ লেয়ার পরিবর্তন করতে পারেন।

এখানে একটি ResNet50 মডেল উদাহরণ দেয়া হল:

from tensorflow.keras.applications import ResNet50
from tensorflow.keras import layers, models

# Pretrained মডেল লোড করা (ResNet50), তবে weights হল 'imagenet' যা ImageNet ডেটাসেট থেকে প্রশিক্ষিত
base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

# শেষ লেয়ার ছাড়া বাকী অংশ ব্যবহার করা হবে
base_model.trainable = False  # প্রথমে base model freeze করা, যাতে এটি ট্রেনিং না হয়

২. কাস্টম হেড (Custom Head) যোগ করা

Pretrained মডেলটির শেষে সাধারণত একটি "fully connected" (FC) লেয়ার থাকে, যা নতুন ক্লাসের জন্য পরিবর্তন করতে হবে। সাধারণত flattening এবং dense layers যোগ করে একটি কাস্টম হেড তৈরি করা হয়।

model = models.Sequential([
    base_model,  # Pretrained model
    layers.GlobalAveragePooling2D(),  # Global average pooling
    layers.Dense(1024, activation='relu'),  # Fully connected layer
    layers.Dense(10, activation='softmax')  # Output layer (10 class for example)
])

৩. ফাইন-টিউনিং (Fine-Tuning)

এখন, আপনি fine-tuning করতে পারেন, অর্থাৎ, pretrained মডেলের কিছু লেয়ার আবার ট্রেনিং করতে পারেন। সাধারণত প্রথমে base model এর লেয়ারগুলি "freeze" করা হয়, এবং তারপর কিছু লেয়ারকে trainable করে পুনরায় ট্রেনিং শুরু করা হয়।

# Base model এর লেয়ার ফ্রিজ করা
base_model.trainable = False

# মডেল কম্পাইল করা
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# ট্রেনিং
history = model.fit(x_train, y_train, epochs=5, batch_size=32, validation_data=(x_val, y_val))

এখন, আপনি base model এর কিছু লেয়ারগুলো fine-tune করতে পারেন (freeze/remove অংশ এবং ট্রেনিং করা):

# Base model এর শেষ কয়েকটি লেয়ার trainable করা
for layer in base_model.layers[-10:]:  # শেষ ১০টি লেয়ার
    layer.trainable = True

# মডেল কম্পাইল করা পুনরায়
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])

# পুনরায় ট্রেনিং শুরু করা
history_finetune = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_val, y_val))

৪. কাস্টম ডেটাসেটে ফাইন-টিউন করা

আপনার নিজস্ব ডেটাসেটের উপর মডেলটি ফাইন-টিউন করতে, ডেটাসেটের প্রস্তুতি ও প্রিপ্রসেসিং গুরুত্বপূর্ণ। ডেটা অগমেন্টেশন, রিসাইজিং, স্কেলিং এবং নরমালাইজেশন আপনার মডেলের কার্যকারিতা উন্নত করতে সাহায্য করবে।

from tensorflow.keras.preprocessing.image import ImageDataGenerator

# ডেটা অগমেন্টেশন
train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=30, width_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True)
val_datagen = ImageDataGenerator(rescale=1./255)

# ডেটা লোড করা
train_generator = train_datagen.flow_from_directory('path_to_train_data', target_size=(224, 224), batch_size=32, class_mode='categorical')
val_generator = val_datagen.flow_from_directory('path_to_val_data', target_size=(224, 224), batch_size=32, class_mode='categorical')

# ট্রেনিং
history_finetune = model.fit(train_generator, epochs=10, validation_data=val_generator)

৫. পারফরম্যান্স ইভালুয়েশন

ফাইন-টিউনিং শেষ হওয়ার পর, মডেলটির পারফরম্যান্স মূল্যায়ন করতে হবে। আপনি evaluate() মেথড ব্যবহার করে মডেলটির পারফরম্যান্স যাচাই করতে পারেন:

# ইভালুয়েশন ডেটাসেটে মডেল ইভালুয়েশন
loss, accuracy = model.evaluate(x_test, y_test)
print(f"Test Loss: {loss}")
print(f"Test Accuracy: {accuracy}")

৬. মডেল সংরক্ষণ

ফাইন-টিউন করা মডেলটি সংরক্ষণ করতে হবে যাতে আপনি পরবর্তীতে পুনরায় ব্যবহার করতে পারেন:

# মডেল সংরক্ষণ
model.save('fine_tuned_model.h5')

সারাংশ

Pretrained মডেল ফাইন-টিউনিং একটি খুবই শক্তিশালী কৌশল, যা পূর্বে প্রশিক্ষিত মডেলকে আপনার নির্দিষ্ট ডেটাসেটের জন্য কাস্টমাইজ করে। আপনি একটি pretrained মডেল যেমন VGG16, ResNet50 ব্যবহার করে এবং তার পরে কাস্টম লেয়ার যোগ করে, base model এর কিছু লেয়ারকে freeze অথবা trainable করে ফাইন-টিউন করতে পারেন। এই প্রক্রিয়ায় আপনি কম সময় এবং কম ডেটা ব্যবহার করেও উচ্চ পারফরম্যান্স পেতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...