Custom Training এবং Hyperparameter Tuning

Latest Technologies - ডিপ স্পিড (DeepSpeed)
340

Custom Training এবং Hyperparameter Tuning

Custom Training হল মডেল Training প্রক্রিয়াকে কাস্টমাইজ করার একটি প্রক্রিয়া, যেখানে বিভিন্ন প্রয়োজনীয়তা ও লক্ষ্যের ভিত্তিতে Training-এর ধাপগুলি নির্ধারণ করা হয়। Hyperparameter Tuning হল একটি কৌশল যা মডেল উন্নয়নের সময় হাইপারপ্যারামিটারগুলির মান নির্ধারণ করে, যাতে মডেলের কার্যকারিতা উন্নত হয়।

নিচে Custom Training এবং Hyperparameter Tuning-এর প্রক্রিয়া এবং এর ব্যবহার আলোচনা করা হলো।


১. Custom Training

Custom Training প্রক্রিয়ায় আপনি Training Loop এবং মডেল প্রশিক্ষণের অন্যান্য দিককে কাস্টমাইজ করতে পারেন। এটি বিভিন্ন ধরনের মডেল এবং ডেটার সাথে কাজ করার সময় প্রয়োজনীয় হতে পারে।

Custom Training Loop উদাহরণ

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

# মডেল তৈরি
class CustomModel(nn.Module):
    def __init__(self):
        super(CustomModel, self).__init__()
        self.fc1 = nn.Linear(10, 50)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(50, 2)

    def forward(self, x):
        x = self.relu(self.fc1(x))
        return self.fc2(x)

# ডেটা তৈরি
data = torch.randn(1000, 10)
labels = torch.randint(0, 2, (1000,))

# ডেটাসেট এবং ডেটা লোডার তৈরি
train_dataset = TensorDataset(data, labels)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)

# মডেল, অপ্টিমাইজার এবং লস ফাংশন তৈরি
model = CustomModel()
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()

# Custom Training Loop
def custom_training_loop(model, train_loader, optimizer, criterion, epochs):
    for epoch in range(epochs):
        model.train()  # মডেলকে Training মোডে সেট করা
        for batch_data, batch_labels in train_loader:
            optimizer.zero_grad()  # গ্রেডিয়েন্ট শূন্য করা
            outputs = model(batch_data)  # মডেলের পূর্বাভাস
            loss = criterion(outputs, batch_labels)  # লস গণনা
            loss.backward()  # ব্যাকপ্রোপাগেশন
            optimizer.step()  # অপ্টিমাইজারের স্টেপ
            
        print(f'Epoch {epoch+1}, Loss: {loss.item():.4f}')

# Training প্রক্রিয়া চালানো
custom_training_loop(model, train_loader, optimizer, criterion, epochs=10)

কোডের ব্যাখ্যা:

  • CustomModel: একটি কাস্টম নিউরাল নেটওয়ার্ক তৈরি করা হয়েছে।
  • custom_training_loop: Custom Training Loop তৈরি করা হয়েছে, যেখানে Training-এর বিভিন্ন ধাপ কাস্টমাইজ করা হয়েছে।

২. Hyperparameter Tuning

Hyperparameter Tuning হল মডেলের কার্যকারিতা উন্নত করার জন্য বিভিন্ন হাইপারপ্যারামিটারের মান নির্ধারণ করার প্রক্রিয়া। হাইপারপ্যারামিটার যেমন লার্নিং রেট, ব্যাচ সাইজ, এবং এপোক সংখ্যা প্রভাব ফেলে মডেলের পারফরম্যান্সে।

Hyperparameter Tuning এর কৌশল:

Grid Search:

  • বিভিন্ন হাইপারপ্যারামিটারের মানের জন্য একটি গ্রিড তৈরি করে সমস্ত সম্ভাব্য কম্বিনেশন পরীক্ষা করা হয়।
  • উদাহরণ:
    • লার্নিং রেট: [0.001, 0.01, 0.1]
    • ব্যাচ সাইজ: [16, 32, 64]

Random Search:

  • গ্রিডের পরিবর্তে র্যান্ডম হাইপারপ্যারামিটারগুলির মধ্যে নির্বাচন করে পরীক্ষা করা হয়। এটি Grid Search-এর তুলনায় অধিক কার্যকর হতে পারে।

Bayesian Optimization:

  • Bayesian Optimization মডেল ব্যবহার করে হাইপারপ্যারামিটারগুলি অপ্টিমাইজ করে এবং তাদের কার্যকারিতা অনুযায়ী বুদ্ধিমত্তার সাথে নতুন মান পরীক্ষা করে।

Hyperopt:

  • Hyperopt একটি Python লাইব্রেরি যা হাইপারপ্যারামিটার টিউনিংকে কার্যকরভাবে পরিচালনা করে, এবং এটি বিভিন্ন কৌশল যেমন Random Search এবং Bayesian Optimization সমর্থন করে।

Hyperparameter Tuning উদাহরণ

এখানে Grid Search কিভাবে বাস্তবায়ন করা যায় তার একটি উদাহরণ:

from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression

# মডেল তৈরি
model = LogisticRegression()

# হাইপারপ্যারামিটারগুলি নির্ধারণ
param_grid = {
    'C': [0.1, 1, 10],
    'solver': ['liblinear', 'saga']
}

# Grid Search বাস্তবায়ন করা
grid_search = GridSearchCV(model, param_grid, cv=5)
grid_search.fit(X_train, y_train)  # X_train এবং y_train আপনার ডেটা

# সেরা হাইপারপ্যারামিটার এবং স্কোর প্রিন্ট করা
print(f'Best Parameters: {grid_search.best_params_}')
print(f'Best Score: {grid_search.best_score_}')

সারসংক্ষেপ

  • Custom Training: Training Loop কাস্টমাইজ করা, যা Training-এর সময় বিশেষ প্রয়োজনীয়তা পূরণে সহায়ক।
  • Hyperparameter Tuning: হাইপারপ্যারামিটারগুলির মান অপ্টিমাইজ করে মডেলের কার্যকারিতা উন্নত করা।
  • কৌশল: Grid Search, Random Search, Bayesian Optimization ইত্যাদি ব্যবহার করা হয়।

এই প্রক্রিয়াগুলো বড় মডেল Training এবং ডিপ লার্নিং প্রকল্পের সাফল্যের জন্য গুরুত্বপূর্ণ, কারণ সঠিক হাইপারপ্যারামিটার নির্বাচন এবং Training কাস্টমাইজেশন মডেলের পারফরম্যান্সে উল্লেখযোগ্য প্রভাব ফেলে।

Content added By

Hyperparameter Tuning এর কৌশল

253

Hyperparameter Tuning হলো machine learning এবং deep learning মডেলগুলোর performance উন্নত করার জন্য একটি গুরুত্বপূর্ণ প্রক্রিয়া। Hyperparameters হলো সেই সেটিংস বা কনফিগারেশন যেগুলো মডেল training এর আগে নির্ধারণ করতে হয় এবং সেগুলো মডেলের শেখার প্রক্রিয়ার ওপর প্রভাব ফেলে। সঠিক hyperparameters নির্বাচন করা মডেলের accuracy এবং efficiency এর জন্য অত্যন্ত গুরুত্বপূর্ণ।

Hyperparameter Tuning এর কৌশল

নিচে কিছু সাধারণ এবং কার্যকর কৌশল আলোচনা করা হলো যা hyperparameter tuning এর জন্য ব্যবহৃত হয়:

1. Grid Search

  • বর্ণনা: Grid Search একটি systematic এবং exhaustive পদ্ধতি যেখানে pre-defined hyperparameter সেটিংসের জন্য সম্ভাব্য সকল combination পরীক্ষা করা হয়।
  • প্রক্রিয়া:
    • প্রথমে hyperparameters এবং তাদের সম্ভাব্য মান নির্ধারণ করা হয়।
    • সকল সম্ভাব্য combination তৈরি করা হয় এবং প্রতিটি combination এর জন্য model train এবং validate করা হয়।
  • উদাহরণ:
    • Learning rate: [0.001, 0.01, 0.1]
    • Batch size: [16, 32, 64]
from sklearn.model_selection import GridSearchCV

# GridSearchCV ব্যবহার করে hyperparameter tuning
param_grid = {
    'learning_rate': [0.001, 0.01, 0.1],
    'batch_size': [16, 32, 64]
}

grid_search = GridSearchCV(estimator=model, param_grid=param_grid, scoring='accuracy', cv=3)
grid_search.fit(X_train, y_train)

2. Random Search

  • বর্ণনা: Random Search একটি probabilistic পদ্ধতি যেখানে নির্দিষ্ট সংখ্যক random hyperparameter combination নির্বাচন করা হয় এবং তাদের performance পরীক্ষা করা হয়।
  • প্রক্রিয়া:
    • Grid Search এর তুলনায় কম combination পরীক্ষা করে, কিন্তু এটি বিভিন্ন combination গুলোর মধ্যে diversity বাড়ায়।
  • উদাহরণ:
from sklearn.model_selection import RandomizedSearchCV

# RandomizedSearchCV ব্যবহার করে hyperparameter tuning
param_dist = {
    'learning_rate': [0.001, 0.01, 0.1],
    'batch_size': [16, 32, 64]
}

random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=10, scoring='accuracy', cv=3)
random_search.fit(X_train, y_train)

3. Bayesian Optimization

  • বর্ণনা: Bayesian Optimization একটি probabilistic model ব্যবহার করে hyperparameter tuning করে। এটি previous trials এর ফলাফল ব্যবহার করে পরবর্তী hyperparameter সেটিংস নির্ধারণ করে।
  • প্রক্রিয়া:
    • Gaussian process ব্যবহার করে model performance এর সম্ভাব্যতা নির্ধারণ করা হয় এবং সেই অনুযায়ী hyperparameter সেটিংস নির্বাচন করা হয়।
  • উদাহরণ:
from skopt import BayesSearchCV

# Bayesian optimization ব্যবহার করে hyperparameter tuning
param_space = {
    'learning_rate': (1e-6, 1e-1, 'log-uniform'),
    'batch_size': (16, 64)
}

opt = BayesSearchCV(model, param_space, n_iter=32, scoring='accuracy', cv=3)
opt.fit(X_train, y_train)

4. Hyperband

  • বর্ণনা: Hyperband একটি resource allocation পদ্ধতি যা দ্রুত convergence নিশ্চিত করে। এটি নির্দিষ্ট সময়সীমার মধ্যে সবচেয়ে promising hyperparameter configurations নির্বাচন করে।
  • প্রক্রিয়া:
    • এটি দ্রুত model evaluations করে এবং নিম্ন-performing configurations কে বাদ দিয়ে দ্রুত convergence সম্ভব করে।
  • উদাহরণ:
from skopt import Optimizer

# Hyperband ব্যবহার করে hyperparameter tuning
opt = Optimizer(dimensions=[(1e-6, 1e-1), (16, 64)], base_estimator="GP")

for i in range(100):
    x = opt.ask()
    model.fit(X_train, y_train)
    score = evaluate(model, X_val, y_val)  # Validate the model
    opt.tell(x, score)

5. Manual Search

  • বর্ণনা: Hyperparameters manually test করা, যেখানে researcher অভিজ্ঞতার ভিত্তিতে সম্ভাব্য hyperparameters নির্বাচন করে।
  • প্রক্রিয়া:
    • এই পদ্ধতি সময়সাপেক্ষ হতে পারে, কিন্তু sometimes effective ফলাফল দেয়।
  • উদাহরণ:
    • Hands-on experimentation করা এবং tuning করতে tuning logs রেকর্ড করা।

Hyperparameter Tuning এর পদ্ধতি

  1. Cross-Validation: Hyperparameter tuning এর সময় Cross-Validation ব্যবহার করে model এর performance নিশ্চিত করা যায়।
  2. Performance Metrics: Hyperparameters tuning এর ফলাফল মূল্যায়ন করার জন্য performance metrics যেমন accuracy, precision, recall, F1-score ব্যবহার করা হয়।

উপসংহার

Hyperparameter tuning model performance উন্নত করার জন্য একটি অপরিহার্য প্রক্রিয়া। Grid Search, Random Search, Bayesian Optimization, Hyperband, এবং Manual Search এর মতো বিভিন্ন কৌশল ব্যবহার করে hyperparameters সঠিকভাবে নির্বাচন করা যায়। সঠিক hyperparameters নির্বাচনের মাধ্যমে model efficiency এবং accuracy উল্লেখযোগ্যভাবে বৃদ্ধি করা সম্ভব।

Content added By

DeepSpeedConfig ফাইল এবং তার কনফিগারেশন

263

DeepSpeedConfig ফাইল এবং তার কনফিগারেশন

DeepSpeedConfig ফাইল হল একটি JSON ফাইল যা DeepSpeed লাইব্রেরির সাহায্যে Training করার সময় বিভিন্ন কনফিগারেশন প্যারামিটার নির্ধারণ করতে ব্যবহৃত হয়। এই কনফিগারেশন ফাইলের মাধ্যমে মডেল Training-এর জন্য অপ্টিমাইজেশন প্যারামিটার, মেমোরি ব্যবস্থাপনা, এবং অন্যান্য কার্যক্ষমতা নিশ্চিত করা হয়।

নিচে DeepSpeedConfig ফাইলের বিভিন্ন প্যারামিটার এবং তাদের কনফিগারেশন সম্পর্কে আলোচনা করা হলো।


DeepSpeedConfig ফাইলের মূল প্যারামিটার

train_batch_size:

  • Training-এর জন্য মোট ব্যাচ সাইজ নির্ধারণ করে।
  • এটি মডেল Training-এর সময় GPU মেমোরি ব্যবস্থাপনার ওপর প্রভাব ফেলে।

steps_per_print:

  • Training-এর কত স্টেপ পরপর লস বা অন্যান্য তথ্য প্রদর্শিত হবে তা নির্ধারণ করে।

fp16:

  • Mixed Precision Training সক্রিয় করতে ব্যবহৃত হয়। যদি enabled সত্য হয়, তাহলে FP16 ব্যবহার করা হবে।

zero_optimization:

  • ZeRO (Zero Redundancy Optimizer) এর বিভিন্ন স্তর সক্রিয় করে মেমোরি ব্যবস্থাপনা উন্নত করে।
  • উদাহরণ:

gradient_accumulation_steps:

  • ব্যাচ সাইজের উপর ভিত্তি করে গ্রেডিয়েন্ট একিউমুলেশন স্টেপ সংখ্যা নির্ধারণ করে। এটি মেমোরি খরচ কমাতে সাহায্য করে।

gradient_clipping:

  • গ্রেডিয়েন্ট ক্লিপিং সক্রিয় করে, যা Training এর সময় গ্রেডিয়েন্টের মান সীমাবদ্ধ করে। এটি Trainingকে আরও স্থিতিশীল করে।

checkpointing:

  • মডেল Training-এর সময় Checkpoint সংরক্ষণ করতে সক্ষম করে, যাতে Training পুনরায় শুরু করা যায়।

উদাহরণ DeepSpeedConfig ফাইল

নিচে একটি উদাহরণ DeepSpeedConfig ফাইল দেওয়া হলো:

{
  "train_batch_size": 32,
  "gradient_accumulation_steps": 1,
  "steps_per_print": 100,
  "fp16": {
    "enabled": true
  },
  "zero_optimization": {
    "stage": 2
  },
  "gradient_clipping": 1.0,
  "checkpointing": {
    "enabled": true,
    "checkpoint_interval": 1000
  }
}

ব্যাখ্যা:

  • train_batch_size: 32, যা Training-এর সময় প্রতি ব্যাচে 32 উদাহরণ ব্যবহার করবে।
  • gradient_accumulation_steps: 1, একবারে গ্রেডিয়েন্ট আপডেট করা হবে।
  • steps_per_print: 100, প্রতি 100 স্টেপ পর Training তথ্য প্রদর্শিত হবে।
  • fp16: Mixed Precision Training সক্রিয় করা হয়েছে।
  • zero_optimization: ZeRO Optimization Stage 2 সক্রিয় করা হয়েছে, যা মেমোরি ব্যবস্থাপনাকে উন্নত করে।
  • gradient_clipping: গ্রেডিয়েন্ট ক্লিপিং প্রয়োগ করা হয়েছে 1.0 মানে।
  • checkpointing: Checkpoint সক্রিয় করা হয়েছে, প্রতি 1000 স্টেপে Checkpoint সংরক্ষণ করা হবে।

DeepSpeedConfig ফাইল ব্যবহার করা

DeepSpeedConfig ফাইল ব্যবহারের জন্য আপনাকে এটি মডেল Training স্ক্রিপ্টে উল্লেখ করতে হবে। উদাহরণস্বরূপ:

import deepspeed

# DeepSpeed ইনিশিয়ালাইজেশন
model_engine, optimizer, _, _ = deepspeed.initialize(model=model, config="ds_config.json")

এখানে, ds_config.json হলো আপনার DeepSpeedConfig ফাইলের নাম, যা আপনি Training-এর সময় ব্যবহার করবেন।


সারসংক্ষেপ

  • DeepSpeedConfig ফাইল: DeepSpeed-এর জন্য কনফিগারেশন ফাইল যা Training-এর বিভিন্ন প্যারামিটার নির্ধারণ করে।
  • মূল প্যারামিটার: train_batch_size, fp16, zero_optimization, gradient_clipping, checkpointing ইত্যাদি।
  • উদাহরণ: একটি সম্পূর্ণ DeepSpeedConfig ফাইলের উদাহরণ উল্লেখ করা হয়েছে।

DeepSpeedConfig ফাইল সঠিকভাবে কনফিগার করে বড় মডেল Training করার সময় মেমোরি ব্যবস্থাপনা এবং কার্যক্ষমতা উন্নত করা সম্ভব।

Content added By

Custom Training Loop তৈরি করা এবং অপ্টিমাইজ করা

264

Custom training loop তৈরি করা এবং অপ্টিমাইজ করা ডীপ লার্নিং মডেল প্রশিক্ষণের জন্য একটি গুরুত্বপূর্ণ প্রক্রিয়া। একটি কাস্টম ট্রেইনিং লুপ ব্যবহার করার মাধ্যমে আপনি প্রশিক্ষণের নিয়ন্ত্রণ নিতে পারেন এবং আপনার মডেলটির জন্য সুনির্দিষ্ট পদ্ধতি ও কৌশলগুলি কার্যকর করতে পারেন। এখানে আমরা PyTorch ব্যবহার করে একটি কাস্টম ট্রেইনিং লুপ তৈরি করার প্রক্রিয়া এবং তা অপ্টিমাইজ করার পদ্ধতি আলোচনা করব।

ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করা

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

ধাপ ২: ডেটাসেট তৈরি করা

একটি ডেটাসেট তৈরি করুন। এখানে আমরা একটি সিম্পল সিনস ফাংশন দিয়ে ডেটা তৈরি করব:

# সিম্পল ডেটাসেট তৈরি
X = torch.linspace(-10, 10, 100).view(-1, 1)
y = torch.sin(X) + 0.1 * torch.randn(X.size())  # সাইন ফাংশন + কিছু নইজি

# DataLoader তৈরি করা
dataset = TensorDataset(X, y)
train_loader = DataLoader(dataset, batch_size=16, shuffle=True)

ধাপ ৩: মডেল তৈরি করা

এখন একটি সিম্পল নিউরাল নেটওয়ার্ক তৈরি করা যাক:

class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(1, 64)
        self.fc2 = nn.Linear(64, 32)
        self.fc3 = nn.Linear(32, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        return self.fc3(x)

model = SimpleNN()

ধাপ ৪: Custom Training Loop তৈরি করা

এখন কাস্টম ট্রেইনিং লুপ তৈরি করার সময় এসেছে।

# Loss function এবং optimizer নির্ধারণ
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# Training Loop
num_epochs = 100
for epoch in range(num_epochs):
    model.train()  # মডেলকে training মোডে সেট করা
    running_loss = 0.0

    for inputs, labels in train_loader:
        optimizer.zero_grad()  # গ্র্যাডিয়েন্টস রিসেট করা

        # Forward pass
        outputs = model(inputs)
        loss = criterion(outputs, labels)

        # Backward pass
        loss.backward()
        optimizer.step()  # অপটিমাইজার স্টেপ

        running_loss += loss.item()

    # Epoch শেষে গড় লস প্রিন্ট করা
    epoch_loss = running_loss / len(train_loader)
    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {epoch_loss:.4f}')

ধাপ ৫: Model Evaluation

Training এর পর model evaluation এর জন্য একটি ফাংশন তৈরি করা যাক:

def evaluate_model(model, dataloader):
    model.eval()  # মডেলকে evaluation মোডে সেট করা
    total_loss = 0.0

    with torch.no_grad():  # Gradient calculation বন্ধ করা
        for inputs, labels in dataloader:
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            total_loss += loss.item()

    avg_loss = total_loss / len(dataloader)
    print(f'Validation Loss: {avg_loss:.4f}')

# Evaluation ডেটাসেট তৈরি করা
val_loader = DataLoader(dataset, batch_size=16, shuffle=False)
evaluate_model(model, val_loader)

অপ্টিমাইজেশন কৌশল

কাস্টম ট্রেইনিং লুপ তৈরি করার সময় কিছু অপ্টিমাইজেশন কৌশল অনুসরণ করা যেতে পারে:

Learning Rate Scheduling:

  • Learning rate ধীরে ধীরে পরিবর্তন করার জন্য learning rate scheduler ব্যবহার করা যেতে পারে।

Gradient Clipping:

  • Training এর সময় gradients clipping করতে পারেন, যা training stability উন্নত করে।

Checkpointing:

  • Training এর সময় model checkpointing ব্যবহার করে মডেলের উন্নত সংস্করণ সংরক্ষণ করতে পারেন।

Early Stopping:

  • Training প্রক্রিয়া বন্ধ করার জন্য validation loss নিরীক্ষণ করতে পারেন এবং একটি threshold-এর নিচে গেলে training বন্ধ করতে পারেন।

সম্পূর্ণ কোড উদাহরণ

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

# সিম্পল ডেটাসেট তৈরি
X = torch.linspace(-10, 10, 100).view(-1, 1)
y = torch.sin(X) + 0.1 * torch.randn(X.size())  # সাইন ফাংশন + কিছু নইজি
dataset = TensorDataset(X, y)
train_loader = DataLoader(dataset, batch_size=16, shuffle=True)

# মডেল তৈরি
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(1, 64)
        self.fc2 = nn.Linear(64, 32)
        self.fc3 = nn.Linear(32, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        return self.fc3(x)

model = SimpleNN()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# Training Loop
num_epochs = 100
for epoch in range(num_epochs):
    model.train()
    running_loss = 0.0

    for inputs, labels in train_loader:
        optimizer.zero_grad()

        # Forward pass
        outputs = model(inputs)
        loss = criterion(outputs, labels)

        # Backward pass
        loss.backward()
        optimizer.step()

        running_loss += loss.item()

    epoch_loss = running_loss / len(train_loader)
    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {epoch_loss:.4f}')

# Model Evaluation
def evaluate_model(model, dataloader):
    model.eval()
    total_loss = 0.0

    with torch.no_grad():
        for inputs, labels in dataloader:
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            total_loss += loss.item()

    avg_loss = total_loss / len(dataloader)
    print(f'Validation Loss: {avg_loss:.4f}')

val_loader = DataLoader(dataset, batch_size=16, shuffle=False)
evaluate_model(model, val_loader)

উপসংহার

Custom training loop তৈরি করা আপনাকে model training প্রক্রিয়া এবং বিভিন্ন hyperparameter management এর উপর পূর্ণ নিয়ন্ত্রণ দেয়। এটি বিভিন্ন optimization techniques (যেমন learning rate scheduling, gradient clipping, এবং checkpointing) প্রয়োগ করার সুযোগ দেয়। এর ফলে model efficiency বৃদ্ধি করা সম্ভব, যা training process কে আরও কার্যকর এবং ফলদায়ক করে।

Content added By

উদাহরণসহ Hyperparameter Tuning

223

Hyperparameter Tuning হলো machine learning মডেলের performance উন্নত করার একটি গুরুত্বপূর্ণ প্রক্রিয়া। এটি মডেলের জন্য বিভিন্ন hyperparameters নির্বাচন এবং সঠিক মান নির্ধারণ করার মাধ্যমে কার্যকরী হয়। এখানে, আমরা কিছু সাধারণ পদ্ধতি নিয়ে আলোচনা করব এবং একটি উদাহরণ দেব যেখানে আমরা Grid Search এবং Random Search ব্যবহার করে hyperparameter tuning করব।

Hyperparameter Tuning কৌশল

Grid Search:

  • একটি systematic পদ্ধতি, যেখানে predefined hyperparameter সেটিংসের সকল combination পরীক্ষা করা হয়।

Random Search:

  • একাধিক random hyperparameter combination নির্বাচন করা হয় এবং তাদের performance পরীক্ষা করা হয়।

Bayesian Optimization:

  • Previous trials এর ফলাফল ব্যবহার করে পরবর্তী hyperparameter সেটিংস নির্ধারণ করা হয়।

Hyperband:

  • এটি বিভিন্ন hyperparameter configurations এর জন্য resource allocation করে, সবচেয়ে promising configurations নির্বাচন করে।

উদাহরণ: Hyperparameter Tuning Using Grid Search and Random Search

এখানে একটি উদাহরণ রয়েছে যেখানে আমরা scikit-learn লাইব্রেরি ব্যবহার করে একটি সিম্পল মডেলের জন্য hyperparameter tuning করব। আমরা RandomForestClassifier ব্যবহার করব এবং Grid Search ও Random Search এর মাধ্যমে tuning করব।

ধাপ ১: প্রয়োজনীয় প্যাকেজ ইম্পোর্ট করা

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV, RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

ধাপ ২: ডেটাসেট প্রস্তুত করা

এখানে আমরা Iris dataset ব্যবহার করব।

# Iris dataset লোড করা
iris = load_iris()
X = iris.data
y = iris.target

# Train-test split করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

ধাপ ৩: Grid Search এর মাধ্যমে Hyperparameter Tuning

# Random Forest Classifier তৈরি করা
rf = RandomForestClassifier()

# Hyperparameter grid নির্ধারণ করা
param_grid = {
    'n_estimators': [10, 50, 100],
    'max_depth': [None, 5, 10, 15],
    'min_samples_split': [2, 5, 10]
}

# Grid Search তৈরি করা
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, scoring='accuracy', cv=5)
grid_search.fit(X_train, y_train)

# সেরা hyperparameters এবং মডেল মূল্যায়ন করা
best_grid_model = grid_search.best_estimator_
grid_predictions = best_grid_model.predict(X_test)
grid_accuracy = accuracy_score(y_test, grid_predictions)

print(f"Best Hyperparameters from Grid Search: {grid_search.best_params_}")
print(f"Accuracy from Grid Search: {grid_accuracy:.4f}")

ধাপ ৪: Random Search এর মাধ্যমে Hyperparameter Tuning

# Hyperparameter distribution নির্ধারণ করা
param_dist = {
    'n_estimators': [10, 50, 100, 200],
    'max_depth': [None, 5, 10, 15],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 4]
}

# Random Search তৈরি করা
random_search = RandomizedSearchCV(estimator=rf, param_distributions=param_dist, n_iter=10, scoring='accuracy', cv=5, random_state=42)
random_search.fit(X_train, y_train)

# সেরা hyperparameters এবং মডেল মূল্যায়ন করা
best_random_model = random_search.best_estimator_
random_predictions = best_random_model.predict(X_test)
random_accuracy = accuracy_score(y_test, random_predictions)

print(f"Best Hyperparameters from Random Search: {random_search.best_params_}")
print(f"Accuracy from Random Search: {random_accuracy:.4f}")

উপসংহার

Hyperparameter tuning একটি গুরুত্বপূর্ণ প্রক্রিয়া যা মডেলের accuracy এবং performance উন্নত করে। Grid Search এবং Random Search এর মাধ্যমে বিভিন্ন hyperparameter combinations পরীক্ষা করে সেরা ফলাফল পাওয়া যায়।

  • Grid Search exhaustive পদ্ধতি হওয়ার কারণে এটি সব সম্ভাব্য combinations পরীক্ষা করে, তবে এটি computationally ব্যয়বহুল হতে পারে।
  • Random Search কিছু random configurations পরীক্ষা করে, যা computationally কম ব্যয়বহুল এবং অনেক সময় কার্যকর ফলাফল দিতে পারে।

এই উদাহরণে, আমরা Iris dataset ব্যবহার করে Random Forest Classifier এর জন্য hyperparameter tuning করেছি। Hyperparameter tuning মডেলের performance কে উল্লেখযোগ্যভাবে বাড়াতে সাহায্য করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...