Optuna ব্যবহার করে Hyperparameter Tuning প্রোজেক্ট তৈরি করা একটি কার্যকরী এবং সহজ প্রক্রিয়া। এখানে একটি স্টেপ-বাই-স্টেপ গাইড দেওয়া হলো যাতে আপনি একটি সাধারণ PyTorch মডেলের জন্য হাইপারপ্যারামিটার টিউনিং করতে পারেন।
প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
প্রথমে নিশ্চিত করুন যে আপনার সিস্টেমে torch, torchvision, এবং optuna ইনস্টল করা আছে। নিচের কমান্ডগুলি ব্যবহার করুন:
pip install torch torchvision optuna
ধাপ ১: ডেটাসেট তৈরি করা
এখানে আমরা একটি সিম্পল ডেটাসেট ব্যবহার করব। উদাহরণস্বরূপ, MNIST ডেটাসেট ব্যবহার করা হবে।
import torchvision.transforms as transforms
from torchvision import datasets
# ডেটা লোডার তৈরি করুন
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))
])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
ধাপ ২: মডেল তৈরি করা
এখানে একটি সহজ নিউরাল নেটওয়ার্ক তৈরি করা হয়েছে।
import torch
import torch.nn as nn
import torch.nn.functional as F
class SimpleNN(nn.Module):
def __init__(self, hidden_size):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(28 * 28, hidden_size)
self.fc2 = nn.Linear(hidden_size, 10)
def forward(self, x):
x = x.view(-1, 28 * 28) # Flatten the input
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
ধাপ ৩: Objective Function তৈরি করা
Optuna-তে একটি objective function তৈরি করুন যা হাইপারপ্যারামিটারগুলি গ্রহণ করে এবং মডেল প্রশিক্ষণের জন্য ক্ষতি (loss) ফেরত দেয়।
import optuna
def objective(trial):
hidden_size = trial.suggest_int('hidden_size', 16, 128) # Hidden layer size
learning_rate = trial.suggest_loguniform('learning_rate', 1e-5, 1e-1) # Learning rate
model = SimpleNN(hidden_size)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
# Training loop
model.train()
for epoch in range(3): # Just a few epochs for quick testing
for batch_data, batch_labels in train_loader:
optimizer.zero_grad()
outputs = model(batch_data)
loss = criterion(outputs, batch_labels)
loss.backward()
optimizer.step()
return loss.item() # Return the loss for optimization
ধাপ ৪: Optuna স্টাডি তৈরি করা
Optuna স্টাডি তৈরি করুন এবং অপটিমাইজেশন চালান।
# Create a study and optimize the objective function
study = optuna.create_study(direction='minimize') # Minimize the loss
study.optimize(objective, n_trials=50) # Run for 50 trials
ধাপ ৫: ফলাফল বিশ্লেষণ
Optuna-তে ট্রেইন করা মডেলগুলির সেরা হাইপারপ্যারামিটারগুলি দেখতে পারেন।
print('Best hyperparameters: ', study.best_params)
print('Best trial: ', study.best_trial)
উপসংহার
Optuna ব্যবহার করে Hyperparameter Tuning একটি শক্তিশালী এবং কার্যকরী পদ্ধতি। এটি মডেলের কার্যকারিতা বাড়াতে এবং হাইপারপ্যারামিটারগুলির জন্য সঠিক মান খুঁজে বের করতে সাহায্য করে।
Read more