Chapter 22
ট্রান্সফার লার্নিং
Transfer Learning
🎬 অন্যের শেখা কাজে লাগান
Transfer Learning হলো — ImageNet-এর মতো বিশাল ডেটাসেটে pretrained মডেলের শেখা feature ব্যবহার করে আপনার ছোট ডেটাসেটে দ্রুত ও ভালো ফল পাওয়া। আধুনিক CV-র সবচেয়ে শক্তিশালী কৌশল।
কখন Transfer Learning?
- আপনার ডেটাসেট ছোট (১০০–১০,০০০)।
- Domain ImageNet-এর কাছাকাছি (natural images)।
- Compute সীমিত — scratch থেকে train অসম্ভব।
দুটি কৌশল
কৌশল
কখন
কী হয়
Feature Extraction
খুব ছোট ডেটা
Backbone freeze, শুধু head train
Fine-tuning
মাঝারি ডেটা
উপরের কয়েকটি block unfreeze, কম lr-এ train
Keras দিয়ে Feature Extraction
from tensorflow.keras.applications import EfficientNetB0
from tensorflow.keras import layers, models
base = EfficientNetB0(include_top=False, weights="imagenet",
input_shape=(224,224,3))
base.trainable = False # freeze
inp = layers.Input((224,224,3))
x = base(inp, training=False)
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.3)(x)
out = layers.Dense(num_classes, activation="softmax")(x)
model = models.Model(inp, out)
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy",
metrics=["accuracy"])
model.fit(train_ds, validation_data=val_ds, epochs=10)Fine-tuning
base.trainable = True
# শেষ 30 layer ছাড়া সব freeze
for layer in base.layers[:-30]:
layer.trainable = False
model.compile(optimizer=tf.keras.optimizers.Adam(1e-5), # ছোট lr!
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])
model.fit(train_ds, validation_data=val_ds, epochs=10)🔑 ছোট lr কেন?
Pretrained weights প্রায় ঠিকঠাক — বড় lr দিলে শেখা সব ভেঙে যাবে (catastrophic forgetting)। 1e-4 থেকে 1e-5 সাধারণত নিরাপদ।
PyTorch দিয়ে Fine-tuning
import torch, torch.nn as nn
from torchvision import models
net = models.resnet50(weights="IMAGENET1K_V2")
for p in net.parameters():
p.requires_grad = False
net.fc = nn.Linear(net.fc.in_features, num_classes)
opt = torch.optim.Adam(net.fc.parameters(), lr=1e-3)
# fine-tune stage:
for p in net.layer4.parameters():
p.requires_grad = True
opt = torch.optim.Adam(filter(lambda p: p.requires_grad, net.parameters()), lr=1e-5)জনপ্রিয় Backbone
- ResNet50 / 101 — নির্ভরযোগ্য baseline।
- EfficientNet B0-B7 — accuracy/parameter ভারসাম্য।
- ConvNeXt — আধুনিক, transformer-comparable।
- ViT, Swin — Vision Transformer পরিবার।
সাধারণ ভুল
⚠️ এড়িয়ে চলবেন
- Preprocessing ভুল — প্রতিটি মডেলের নিজস্ব mean/std আছে।
- Head train না করেই fine-tune — gradient backbone নষ্ট করে।
- BatchNorm training=True রাখা — frozen backbone-এ গন্ডগোল।
অনুশীলন
১. Flowers ডেটাসেটে EfficientNetB0 দিয়ে 95%+ accuracy অর্জন করুন।
২. Feature extraction vs fine-tuning — training time ও accuracy তুলনা করুন।
৩. ResNet50 ও ConvNeXt-Tiny তুলনা করুন।
সারসংক্ষেপ
✨ এই অধ্যায়ে যা শিখলাম
- Pretrained মডেল ছোট ডেটায় দ্রুত-ভালো ফল দেয়।
- আগে head train, পরে কম lr-এ fine-tune।
- EfficientNet ও ConvNeXt আধুনিক backbone।