State Dictionary এবং Model Serialization PyTorch-এ মডেল সংরক্ষণ এবং পুনরায় লোড করার জন্য ব্যবহৃত হয়। এগুলো মডেল ট্রেনিংয়ের পরে মডেলের ওজন এবং প্যারামিটার সংরক্ষণ এবং পুনরুদ্ধারে গুরুত্বপূর্ণ ভূমিকা পালন করে।
1. State Dictionary
PyTorch-এ State Dictionary হলো একটি Python dictionary যেখানে মডেলের সমস্ত লেয়ারের প্যারামিটার এবং optimizer এর অবস্থা (state) সংরক্ষিত থাকে। এটি মডেলের ওজন এবং বায়াস (biases) ইত্যাদির তথ্য সংরক্ষণ করে। State Dictionary ব্যবহার করে মডেলের বর্তমান অবস্থা সেভ বা লোড করা যায়।
State Dictionary এর উদাহরণ:
import torch
import torch.nn as nn
import torch.optim as optim
# একটি সাধারণ নিউরাল নেটওয়ার্ক তৈরি
class SimpleNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SimpleNN, self).__init__()
self.hidden = nn.Linear(input_size, hidden_size)
self.output = nn.Linear(hidden_size, output_size)
def forward(self, x):
x = torch.relu(self.hidden(x))
x = self.output(x)
return x
# মডেল এবং optimizer ইনিশিয়ালাইজ
model = SimpleNN(input_size=2, hidden_size=5, output_size=1)
optimizer = optim.SGD(model.parameters(), lr=0.01)
# State Dictionary প্রিন্ট করা
print("Model's State Dictionary:")
for param_tensor in model.state_dict():
print(param_tensor, "\t", model.state_dict()[param_tensor].size())
print("\nOptimizer's State Dictionary:")
for var_name in optimizer.state_dict():
print(var_name, "\t", optimizer.state_dict()[var_name])
2. Model Serialization
Model Serialization PyTorch-এ মডেলের state dictionary সংরক্ষণ এবং পুনরায় লোড করার প্রক্রিয়া। এটি মডেল ট্রেনিং শেষ হওয়ার পর মডেলের ওজন সংরক্ষণ করতে এবং পরবর্তী সময়ে মডেল পুনরায় ব্যবহার করতে সাহায্য করে।
মডেল সংরক্ষণ (Saving the Model):
# মডেলের state dictionary সংরক্ষণ করা
torch.save(model.state_dict(), 'model.pth')
মডেল পুনরায় লোড (Loading the Model):
# একই আর্কিটেকচার দিয়ে একটি মডেল ইনিশিয়ালাইজ করা
model = SimpleNN(input_size=2, hidden_size=5, output_size=1)
# সংরক্ষিত state dictionary লোড করা
model.load_state_dict(torch.load('model.pth'))
# মডেলকে ইভ্যালুয়েশন মোডে সেট করা
model.eval()
3. Optimizer Serialization
মডেল সংরক্ষণের পাশাপাশি optimizer এর অবস্থা (state) সংরক্ষণ করাও গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি ট্রেনিং পুনরায় শুরু করতে চান।
Optimizer সংরক্ষণ:
# Optimizer-এর state dictionary সংরক্ষণ করা
torch.save(optimizer.state_dict(), 'optimizer.pth')
Optimizer পুনরায় লোড:
# মডেলের মতোই একই optimizer ইনিশিয়ালাইজ করা
optimizer = optim.SGD(model.parameters(), lr=0.01)
# সংরক্ষিত state dictionary লোড করা
optimizer.load_state_dict(torch.load('optimizer.pth'))
4. সম্পূর্ণ মডেল সংরক্ষণ (Saving the Entire Model)
আপনি মডেলের পুরো অবস্থা সরাসরি সংরক্ষণ করতে পারেন, তবে এটি কিছু ক্ষেত্রে সমস্যার সৃষ্টি করতে পারে, যেমন মডেলের ক্লাসের সংজ্ঞা পরিবর্তন করলে বা PyTorch আপডেট করলে। তবে এটি একটি সহজ পদ্ধতি এবং বিশেষ করে ছোট প্রজেক্টের জন্য উপযুক্ত।
সম্পূর্ণ মডেল সংরক্ষণ এবং লোড করার উদাহরণ:
# মডেল সম্পূর্ণভাবে সংরক্ষণ করা
torch.save(model, 'entire_model.pth')
# মডেল পুনরায় লোড করা
model = torch.load('entire_model.pth')
model.eval()
গুরুত্বপূর্ণ টিপস:
- State Dictionary পদ্ধতি প্রাধান্য দেওয়া:
torch.save(model.state_dict(), PATH)পদ্ধতিটি সবচেয়ে সাধারণ এবং মডেলের পোর্টেবিলিটি বাড়াতে সহায়ক। - মডেল আর্কিটেকচার বজায় রাখা: মডেলের state dictionary লোড করার আগে অবশ্যই মডেলের আর্কিটেকচার একই রাখতে হবে।
- Eval Mode: মডেল লোড করার পরে মডেলকে
eval()মোডে সেট করা উচিত, যাতে Dropout এবং Batch Normalization সঠিকভাবে কাজ করে।
এভাবে PyTorch-এ মডেল সংরক্ষণ এবং পুনরায় লোড করার জন্য State Dictionary এবং Model Serialization ব্যবহার করা হয়।
Read more