Transfer Learning একটি পদ্ধতি, যেখানে পূর্বে প্রশিক্ষিত একটি মডেলের শিখন (knowledge) নতুন কাজের জন্য ব্যবহার করা হয়। এর মাধ্যমে সময় ও কম্পিউটেশনাল শক্তি সাশ্রয় করা যায়। Pre-trained মডেলগুলো হল এমন মডেল, যেগুলো বিশাল ডেটাসেটে প্রশিক্ষিত থাকে এবং তারপর নতুন, তুলনামূলক ছোট ডেটাসেটে কাজ করার জন্য ব্যবহার করা যায়। উদাহরণস্বরূপ, ইমেজ প্রসেসিং, NLP (Natural Language Processing) এর জন্য অনেক জনপ্রিয় Pre-trained মডেল রয়েছে।
Transfer Learning কীভাবে কাজ করে?
Transfer Learning-এ একটি Pre-trained মডেলের ওজন এবং প্যারামিটার ব্যবহার করে নতুন কাজের জন্য মডেল প্রশিক্ষণ করা হয়। এ প্রক্রিয়ায় মূলত দুটি পদ্ধতি থাকে:
ফাইন-টিউনিং (Fine-tuning): Pre-trained মডেলের কিছু লেয়ার ফ্রিজ করে রাখা হয় (অর্থাৎ, পরিবর্তন করা হয় না) এবং কিছু লেয়ার নতুন ডেটাসেটের সাথে পুনরায় প্রশিক্ষণ করা হয়। এটি সাধারণত শেষের লেয়ারগুলোর ক্ষেত্রে করা হয়, কারণ এই লেয়ারগুলো নির্দিষ্ট কাজের জন্য বেশি প্রাসঙ্গিক তথ্য ধারণ করে।
ফিচার এক্সট্র্যাকশন (Feature Extraction): Pre-trained মডেল থেকে ফিচার এক্সট্র্যাক্ট করে নতুন ডেটাসেটে ব্যবহার করা হয়। প্রায়শই মডেলের পূর্ববর্তী সব লেয়ার ফ্রিজ করা হয় এবং শুধুমাত্র শেষের আউটপুট লেয়ার নতুন কাজের জন্য পুনরায় প্রশিক্ষণ করা হয়।
Pre-trained মডেল উদাহরণ
ইমেজ প্রক্রিয়াকরণের জন্য:
- VGG16 / VGG19: ইমেজ ক্লাসিফিকেশনের জন্য খুবই জনপ্রিয়।
- ResNet (Residual Networks): খুব গভীর মডেলের জন্য উপযুক্ত, যা বিভিন্ন কম্পিউটার ভিশন সমস্যার জন্য কার্যকরী।
- Inception, EfficientNet, MobileNet: কমপ্যাক্ট এবং মোবাইল ডিভাইসে ব্যবহারের উপযোগী মডেল।
NLP (Natural Language Processing):
- BERT (Bidirectional Encoder Representations from Transformers): বিভিন্ন NLP কাজের জন্য, যেমন প্রশ্নোত্তর, টেক্সট ক্লাসিফিকেশন ইত্যাদির জন্য খুবই কার্যকরী।
- GPT (Generative Pre-trained Transformer): টেক্সট জেনারেশন এবং কথোপকথনের জন্য কার্যকরী।
- Word2Vec / GloVe: শব্দের এম্বেডিং তৈরি করতে ব্যবহার করা হয়।
Transfer Learning-এর উদাহরণ (ইমেজ ক্লাসিফিকেশন)
নীচে একটি উদাহরণ দেওয়া হল, যেখানে VGG16 মডেল ব্যবহার করে নতুন ডেটাসেটের উপর ট্রান্সফার লার্নিং প্রয়োগ করা হবে।
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
# Pre-trained VGG16 মডেল লোড করা (শুরুতে ওজন ফ্রিজ করা)
vgg_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# আমাদের মডেল তৈরি করা
model = Sequential()
model.add(vgg_model) # VGG16 মডেলকে বেস হিসেবে ব্যবহার করা
model.add(Flatten()) # ফিচারগুলোকে সমতল করা
model.add(Dense(256, activation='relu')) # নতুন কাজের জন্য একটি ডেন্স লেয়ার
model.add(Dense(10, activation='softmax')) # আউটপুট লেয়ার (যেমন, ১০ ক্যাটেগরিতে ক্লাসিফিকেশন)
# পূর্বের লেয়ারগুলো ফ্রিজ করা (ট্রেনিং চলাকালে ওজন পরিবর্তন হবে না)
for layer in vgg_model.layers:
layer.trainable = False
# মডেল কম্পাইল করা
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
মডেল প্রশিক্ষণ করা
# ডেটা প্রস্তুত
train_datagen = ImageDataGenerator(rescale=1.0/255.0)
train_generator = train_datagen.flow_from_directory('path_to_train_data', target_size=(224, 224), batch_size=32, class_mode='categorical')
# মডেল প্রশিক্ষণ করা
model.fit(train_generator, epochs=10)
Transfer Learning-এর সুবিধা
- কম সময়: কম সময়ে দ্রুত প্রশিক্ষণ সম্ভব কারণ Pre-trained মডেলের কারণে অনেক কম্পিউটেশন আগে থেকেই করা।
- কম ডেটা প্রয়োজন: কম ডেটা থাকলেও ভাল ফলাফল পাওয়া সম্ভব।
- উন্নত পারফরম্যান্স: Pre-trained মডেলগুলো বড় ডেটাসেটে প্রশিক্ষিত থাকে বলে এদের পারফরম্যান্স সাধারণত ভাল হয়।
ব্যবহার ক্ষেত্র
Transfer Learning এবং Pre-trained মডেল ইমেজ ক্লাসিফিকেশন, অবজেক্ট ডিটেকশন, NLP-এর বিভিন্ন ক্ষেত্রে ব্যবহৃত হয়, যেমন টেক্সট শ্রেণীবিভাগ, প্রশ্নোত্তর ব্যবস্থা, এবং আরও অন্যান্য ক্রম-ভিত্তিক কাজ।
Transfer Learning এবং Pre-trained মডেলের ব্যবহার একাধিক প্রজেক্টে দ্রুত এবং কার্যকর সমাধান আনতে সহায়ক।
Transfer Learning হলো একটি মেশিন লার্নিং কৌশল, যেখানে পূর্বে training করা একটি মডেলের জ্ঞান বা শেখা তথ্য নতুন একটি টাস্কের জন্য ব্যবহার করা হয়। সাধারণত, নতুন মডেল training এর জন্য বিশাল ডেটাসেট এবং দীর্ঘ সময় প্রয়োজন হয়, কিন্তু transfer learning ব্যবহার করে একটি পূর্বে ট্রেনিং করা মডেলের শেখা তথ্য নিয়ে নতুন টাস্কে দ্রুত ও কার্যকরভাবে কাজ করা যায়।
Transfer Learning এর মূল ধারণা
Transfer learning এর মূল ধারণা হলো – একটি মডেল যখন একটি বড় ডেটাসেট, যেমন ImageNet, এর উপর training করা হয়, তখন মডেলটি সাধারণ অনেক বৈশিষ্ট্য শেখে, যা নতুন বা ছোট ডেটাসেটের জন্য পুনরায় ব্যবহার করা যায়। এজন্য আমরা pretrained মডেলের weights এবং features ধরে রাখি এবং নতুন ডেটাসেট বা টাস্কের জন্য কিছু অংশ fine-tune করি।
Transfer Learning এর ধাপসমূহ
Pre-trained Model নির্বাচন করা:
- প্রথমে একটি pre-trained model নির্বাচন করা হয়, যা বড় ডেটাসেটে (যেমন ImageNet) আগে থেকেই training করা হয়েছে।
- উদাহরণস্বরূপ, VGG16, ResNet, বা Inception।
Model Freeze এবং Fine-tuning করা:
- Pre-trained model এর কিছু লেয়ার freeze (অপরিবর্তনীয়) করে রাখা হয় যাতে সেগুলো নতুন ডেটাসেটের জন্য পরিবর্তিত না হয়।
- মডেলের শেষের দিকে থাকা কয়েকটি লেয়ার fine-tune করা হয় যাতে মডেল নতুন ডেটাসেটের বৈশিষ্ট্যগুলো শিখতে পারে।
Custom Output Layer যোগ করা:
- নতুন টাস্কের output requirements অনুযায়ী একটি নতুন output layer যোগ করা হয়।
- যেমন, যদি নতুন ডেটাসেটে ৫টি ক্লাস থাকে, তবে output layer টি ৫টি class score দেবে।
Model Training on New Data:
- নতুন ডেটাসেটে কিছু epochs ধরে model training করা হয় এবং necessary adjustments করা হয়।
Transfer Learning এর প্রয়োজনীয়তা
Transfer learning এর মাধ্যমে training process দ্রুত এবং সহজ করা যায়। এটি বিশেষ করে কার্যকর যেখানে ডেটাসেট ছোট এবং computational resources সীমিত।
Transfer Learning এর প্রয়োজনীয়তার কারণসমূহ:
Time এবং Resources সাশ্রয়:
- একটি মডেল training এ প্রচুর সময় এবং computational resources প্রয়োজন হয়। Transfer learning এর মাধ্যমে অল্প সময় এবং resource ব্যয় করে কার্যকর মডেল তৈরি করা যায়।
ছোট ডেটাসেটের সাথে কাজ করার সুবিধা:
- Transfer learning ব্যবহার করে ছোট ডেটাসেট থেকেও ভালো accuracy পাওয়া যায়, কারণ pretrained মডেল ইতিমধ্যে অনেক গুরুত্বপূর্ণ features শিখে এসেছে।
Complex Model Training ছাড়াই ভালো ফলাফল:
- অনেক জটিল মডেল training করার সময় transfer learning সাহায্য করে, যা প্রচুর বৈশিষ্ট্য ইতিমধ্যে ধারণ করে।
Transfer Learning এর ব্যবহার ক্ষেত্র
1. Computer Vision
- Image Classification: ImageNet এর উপর pretrained model ব্যবহার করে বিভিন্ন image classification tasks এ ভালো ফলাফল পাওয়া যায়।
- Object Detection: Pre-trained model যেমন YOLO বা Faster R-CNN ব্যবহার করে object detection tasks সহজে সম্পাদন করা যায়।
- Image Segmentation: Medical বা satellite images segment করতে transfer learning কার্যকর।
2. Natural Language Processing (NLP)
- Text Classification: Sentiment analysis, spam detection, বা topic classification এর জন্য BERT, GPT বা RoBERTa এর মত pre-trained language model ব্যবহার করা যায়।
- Machine Translation: Pretrained translation models ব্যবহার করে দ্রুত ও কার্যকরভাবে ভাষা অনুবাদ করা যায়।
- Named Entity Recognition (NER): BERT এবং ELMo এর মত pretrained model ব্যবহার করে শব্দের entity সনাক্ত করা যায়।
3. Speech Recognition এবং Audio Processing
- Pre-trained audio মডেল ব্যবহার করে স্পিচ রিকগনিশন ও অডিও ক্লাসিফিকেশন করা যায়, যেমন শব্দ চিনতে বা শব্দের শ্রেণীবিভাগ করতে।
- Emotion Detection in Speech: বক্তার আবেগ সনাক্ত করতে pretrained model ব্যবহার করা হয়।
4. Medical Image Analysis
- Medical imaging (যেমন, MRI, CT scan) analysis এ pretrained CNN model ব্যবহার করে রোগ নির্ণয় করা যায়।
- X-ray image analysis: X-ray image classification এর মাধ্যমে রোগ সনাক্ত করতে transfer learning ব্যবহার করা হয়।
5. Time-Series Forecasting
- Weather Prediction, Stock Market Analysis: Pre-trained RNN বা LSTM model ব্যবহার করে time-series ডেটা বিশ্লেষণ এবং future values predict করা যায়।
Transfer Learning এর উদাহরণ
উদাহরণস্বরূপ, একটি pretrained ResNet মডেল নিয়ে এটিকে নতুন ডেটাসেটের জন্য fine-tune করা:
import torch
import torchvision.models as models
import torch.nn as nn
# Pretrained ResNet মডেল লোড করা
model = models.resnet18(pretrained=True)
# মডেলের শেষ লেয়ার freeze করা যাতে সেগুলো training এর সময় পরিবর্তিত না হয়
for param in model.parameters():
param.requires_grad = False
# মডেলের output layer পরিবর্তন করা নতুন class সংখ্যা অনুযায়ী (যেমন ১০টি ক্লাস)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 10) # নতুন ১০টি ক্লাসের জন্য
# মডেল training এর জন্য প্রস্তুত
উপসংহার
Transfer learning জ্ঞান ও ক্ষমতাসম্পন্ন pretrained model গুলোকে নতুন টাস্কে ব্যবহার করে training সহজ ও দ্রুত করে এবং limited data scenario তেও ভালো ফলাফল প্রদান করে। এটি বিশেষ করে computer vision, NLP, medical image analysis এবং time-series prediction এর ক্ষেত্রে কার্যকরভাবে ব্যবহৃত হয়। Transfer learning মডেল training এর ক্ষেত্রে একটি শক্তিশালী কৌশল, যা বিশেষ করে দক্ষ ও রিসোর্স-সাশ্রয়ী মডেল তৈরি করতে সাহায্য করে।
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 করতে পারবেন, যা কম ডেটাসেটে ভালো পারফরম্যান্স দিতে সক্ষম।
ChainerCV হলো Chainer ফ্রেমওয়ার্কের একটি extension যা বিশেষ করে computer vision টাস্কগুলোর জন্য pre-trained মডেল এবং বিভিন্ন টুল সরবরাহ করে। ChainerCV এর সাহায্যে object detection, image classification, এবং semantic segmentation এর মতো কাজগুলো সহজে করা যায়।
ChainerCV এর pre-trained মডেলগুলো ব্যবহার করে আপনি transfer learning বা object detection এবং classification এর মত বিভিন্ন কাজ দ্রুত সম্পাদন করতে পারেন।
ChainerCV ইনস্টল করা
ChainerCV ব্যবহার করার আগে এটি ইনস্টল করতে হবে। আপনি নিচের কমান্ডটি ব্যবহার করে এটি ইনস্টল করতে পারেন:
pip install chainercv
ChainerCV এর মাধ্যমে Pre-trained মডেল ব্যবহার করে Image Classification
ChainerCV এর pre-trained মডেল দিয়ে image classification করার উদাহরণ এখানে দেওয়া হলো।
import chainer
from chainercv.links import VGG16
from chainercv.transforms import resize
import numpy as np
from PIL import Image
# Pre-trained VGG16 মডেল লোড করা
model = VGG16(pretrained_model='imagenet')
# Image লোড এবং প্রি-প্রসেসিং
image_path = 'sample_image.jpg' # আপনার ইমেজের পাথ দিন
image = Image.open(image_path).convert('RGB')
image = np.asarray(image, dtype=np.float32)
# ইমেজ রিসাইজ করা মডেল ইনপুটের জন্য
image = resize(image, (224, 224))
image = image.transpose(2, 0, 1) # চ্যানেল, উচ্চতা, প্রস্থে কনভার্ট করা (Chainer format)
# মডেল ইনপুটের জন্য নরমালাইজেশন
image -= np.array([103.939, 116.779, 123.68]) # ImageNet ডেটাসেট অনুযায়ী normalization
# Model Prediction
with chainer.using_config('train', False), chainer.using_config('enable_backprop', False):
prediction = model.predict([image])
# প্রেডিকশন রেজাল্ট
predicted_label = np.argmax(prediction[0])
print(f"Predicted label: {predicted_label}")
Object Detection এর জন্য ChainerCV এর মাধ্যমে Pre-trained Model ব্যবহার
ChainerCV এর Faster R-CNN মডেল ব্যবহার করে object detection এর কাজ করা যায়। উদাহরণস্বরূপ, নিচে Faster R-CNN মডেল ব্যবহার করে একটি ইমেজের object detection দেখানো হলো।
from chainercv.links import FasterRCNNVGG16
from chainercv.visualizations import vis_bbox
# Pre-trained Faster R-CNN মডেল লোড করা
model = FasterRCNNVGG16(pretrained_model='voc07')
# Object Detection এর জন্য ইমেজ লোড করা
image_path = 'sample_image.jpg'
image = Image.open(image_path).convert('RGB')
image = np.asarray(image, dtype=np.float32)
# মডেল prediction করা
with chainer.using_config('train', False), chainer.using_config('enable_backprop', False):
bbox, label, score = model.predict([image])
# Visualization
vis_bbox(image, bbox[0], label[0], score[0])
Semantic Segmentation এর জন্য Pre-trained Model ব্যবহার
ChainerCV এর FCN মডেল semantic segmentation টাস্কের জন্য ব্যবহৃত হয়। নিচে FCN মডেল ব্যবহার করে semantic segmentation করার উদাহরণ দেয়া হলো:
from chainercv.links import FCN8s
# Pre-trained FCN মডেল লোড করা
model = FCN8s(n_class=21, pretrained_model='voc')
# ইমেজ লোড করা
image_path = 'sample_image.jpg'
image = Image.open(image_path).convert('RGB')
image = np.asarray(image, dtype=np.float32)
# মডেল prediction করা
with chainer.using_config('train', False), chainer.using_config('enable_backprop', False):
prediction = model.predict([image])
# প্রেডিকশন ম্যাপ visualization (উদাহরণ)
import matplotlib.pyplot as plt
plt.imshow(prediction[0].argmax(axis=0))
plt.show()
ChainerCV এর প্রধান ব্যবহার ক্ষেত্রসমূহ
- Image Classification: ChainerCV এর pre-trained মডেলগুলো সহজে বিভিন্ন ইমেজ শ্রেণীবিভাগে ব্যবহার করা যায়।
- Object Detection: Faster R-CNN এবং SSD (Single Shot MultiBox Detector) এর মত pre-trained মডেলগুলো object detection এর কাজে কার্যকর।
- Semantic Segmentation: FCN, PSPNet এর মত মডেলগুলো semantic segmentation এর জন্য উপযোগী।
উপসংহার
ChainerCV এর pre-trained মডেল ব্যবহার করে image classification, object detection এবং segmentation কাজগুলো সহজে এবং দ্রুত করা যায়। Transfer learning এর সুবিধা নিয়ে বিভিন্ন নতুন টাস্কের জন্য দ্রুত মডেল তৈরি করা যায় এবং ছোট ডেটাসেটে ভালো ফলাফল পাওয়া সম্ভব।
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