Custom Data দিয়ে Pretrained মডেল ফাইন-টিউন করা

Transfer Learning এবং Pretrained মডেল - মাইক্রোসফট কগনিটিভ টুলকিট (Microsoft Cognitive Toolkit) - Machine Learning

293

Pretrained Model ব্যবহার করে Custom Data দিয়ে fine-tuning করার প্রক্রিয়া হল ডিপ লার্নিংয়ের একটি জনপ্রিয় কৌশল যেখানে আপনি একটি প্রি-ট্রেইনড মডেল (যেমন, ResNet, VGG, বা Inception) ব্যবহার করেন এবং আপনার ডেটাসেটের জন্য সেটি পুনরায় প্রশিক্ষণ দেন। এটি সময় বাঁচাতে এবং কম্পিউটেশনাল খরচ কমাতে সাহায্য করে, কারণ মডেলটি ইতিমধ্যেই বড় একটি ডেটাসেটে প্রশিক্ষিত থাকে, এবং কেবলমাত্র আপনার নির্দিষ্ট টাস্কের জন্য মডেলটি কিছু পরিমাণে fine-tune করা হয়।

CNTK (Microsoft Cognitive Toolkit) ব্যবহার করে Pretrained মডেল fine-tuning করার জন্য নিচে ধাপে ধাপে গাইড দেওয়া হচ্ছে।


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

প্রথমে, আপনি CNTK এর মধ্যে একটি pretrained মডেল লোড করবেন। CNTK বিভিন্ন pretrained মডেল প্রদান করে, যেমন ResNet, VGG, ইত্যাদি। এখানে, আমরা একটি pretrained ResNet মডেল ব্যবহার করব।

import cntk as C
from cntk.models import resnet

# Pretrained ResNet50 মডেল লোড করা
model = resnet.resnet50(input_var=C.input_variable((3, 224, 224)))  # RGB চিত্র আকার: 224x224 px

এই কোডে ResNet50 লোড করা হচ্ছে এবং ইনপুট আকার 3x224x224 (RGB চিত্র) নির্ধারণ করা হচ্ছে।


2. Custom Data সেট প্রস্তুতি

আপনার custom dataset প্রস্তুত করতে হবে, যা আপনার মডেলের প্রশিক্ষণের জন্য ব্যবহৃত হবে। এখানে, আমি ImageFolder ব্যবহার করে ডেটাসেট লোড করব, তবে আপনার ডেটাসেটের ধরনের উপর ভিত্তি করে এটি পরিবর্তন করতে হতে পারে।

from cntk.io import MinibatchSource, ImageDeserializer, StreamDef, StreamDefs

# ডেটাসেটের জন্য Input এবং Label Streams তৈরি
input_stream = StreamDef(field='image', transforms=[C.io.transforms.Scale(224, 224), C.io.transforms.Normalize(mean=[123.68, 116.779, 103.939], std=[58.393, 57.12, 57.375])])
label_stream = StreamDef(field='label', transforms=[C.io.transforms.OneHot(10)])  # 10টি ক্লাস

# ডেটাসেট লোড
data_source = MinibatchSource(ImageDeserializer("path_to_your_data", StreamDefs(image=input_stream, label=label_stream)))

এখানে, ImageDeserializer ব্যবহার করে ডেটাসেট লোড করা হচ্ছে এবং ইনপুট ইমেজের আকার 224x224 px নির্ধারণ করা হয়েছে। OneHot ট্রান্সফর্ম ব্যবহার করা হয়েছে 10 ক্লাসের জন্য।


3. Pretrained মডেল Fine-Tune করা

Fine-tuning করার সময়, আমরা সাধারণত pretrained মডেলের কিছু অংশ (বিশেষত শেষের লেয়ারগুলি) নতুন ডেটাসেটের জন্য পুনরায় প্রশিক্ষণ দিয়ে থাকি, এবং বাকি অংশগুলো freeze করে রাখি।

লেয়ার ফ্রিজ করা এবং নতুন লেয়ার যোগ করা

# Pretrained model এর কিছু লেয়ার freeze করা
for param in model.parameters:
    param.is_trainable = False

# নতুন Fully Connected লেয়ার যোগ করা
num_classes = 10  # আপনার ডেটাসেটের ক্লাস সংখ্যা
output_layer = C.layers.Dense(num_classes, activation=C.softmax)(model)

# Fine-tuning করার জন্য নতুন মডেল
fine_tuned_model = output_layer

এখানে, ResNet50 মডেলের সমস্ত প্যারামিটার ফ্রিজ করা হয়েছে (trainable=false), এবং নতুন Fully Connected Layer যোগ করা হয়েছে, যা 10টি ক্লাস আউটপুট করবে।


4. লস ফাংশন এবং অপ্টিমাইজার সেট করা

এখন আপনাকে মডেলটির loss function এবং optimizer সেট করতে হবে। সাধারণত cross entropy loss এবং SGD (Stochastic Gradient Descent) বা Adam অপ্টিমাইজার ব্যবহার করা হয়।

# Loss function এবং অপ্টিমাইজার সেট করা
label_var = C.input_variable(num_classes)

loss = C.cross_entropy_with_softmax(fine_tuned_model, label_var)
error = C.classification_error(fine_tuned_model, label_var)

# SGD অপ্টিমাইজার (learning rate, momentum)
learner = C.sgd(fine_tuned_model.parameters, C.learning_rate_schedule(0.01, C.UnitType.minibatch), momentum=0.9)

# Trainer তৈরি করা
trainer = C.Trainer(fine_tuned_model, (loss, error), learner)

এখানে, cross_entropy_with_softmax লস ফাংশন ব্যবহার করা হয়েছে এবং SGD অপ্টিমাইজার ব্যবহার করা হয়েছে।


5. মডেল প্রশিক্ষণ শুরু করা

এখন, trainer ব্যবহার করে মডেলটি প্রশিক্ষণ শুরু করা যাবে।

# Training Loop
for epoch in range(epochs):
    for minibatch in data_source:
        trainer.train_minibatch(minibatch)
    
    print(f"Epoch {epoch + 1} completed")

এখানে, আপনি আপনার custom dataset থেকে মিনিব্যাচে ডেটা লোড করে মডেলটি প্রশিক্ষণ দেবেন।


6. ফাইন-টিউন মডেল সংরক্ষণ করা

প্রশিক্ষণ শেষে, আপনি মডেলটি সংরক্ষণ করতে পারেন যাতে ভবিষ্যতে এটি পুনরায় ব্যবহার করা যায়।

# Fine-tuned model সংরক্ষণ করা
fine_tuned_model.save("fine_tuned_model.dnn")

সারাংশ

এই গাইডে Pretrained Model (ResNet) দিয়ে fine-tuning করার সম্পূর্ণ প্রক্রিয়া বর্ণনা করা হয়েছে। আপনি প্রি-ট্রেইনড মডেলের পূর্ববর্তী লেয়ারগুলি ফ্রিজ করে এবং নতুন লেয়ার যোগ করে আপনার custom dataset এর জন্য মডেলটি fine-tune করতে পারবেন। প্রক্রিয়াটি ক্লাসিফিকেশন কাজের জন্য অত্যন্ত উপকারী এবং এটি ট্রেনিং সময় অনেক কমিয়ে দেয় কারণ আপনি একটি বড় ডেটাসেটে ট্রেনিং করা মডেলটি পুনরায় ব্যবহার করছেন।

CNTK তে এটি করার জন্য আপনাকে ইনপুট, লেবেল, অপ্টিমাইজার, এবং লস ফাংশন কাস্টমাইজ করতে হবে এবং প্রশিক্ষণের জন্য যথাযথ ডেটাসেট প্রস্তুত করতে হবে।

Content added By
Promotion

Are you sure to start over?

Loading...