Garfield
YZF Admin
PTH dosyası, PyTorch ile eğitilmiş bir modelin ağırlıklarını, model durumunu veya eğitim kontrol noktasını saklayan dosyadır. Yüklemek için önce dosyanın ne içerdiğini bilmeniz gerekir: yalnızca
Bu ayrım önemlidir; bir
Aşağıdaki varsayımsal örnekte önce aynı ağ tanımlanır, sonra
Bu örnekte giriş tensörünün şekli
Eğitime devam etmek için dosya çoğu zaman tek bir ağırlık sözlüğü değil, birden fazla alan içeren kontrol noktasıdır. Örneğin kaydetme kodu şöyle olabilir:
Böyle bir dosyada doğrudan
Bu kod model ve iyileştirici durumunu geri getirir; ancak eğitim döngüsünü kendiliğinden başlatmaz.
Missing key veya Unexpected key hataları çoğunlukla model sınıfındaki katman adlarının kaydedilen dosyayla aynı olmadığını gösterir. Size mismatch ise bir katmanın tensör boyutunun değiştiğine işaret eder; örneğin eğitimde 10 sınıf için kurulan son katman 2 sınıflı bir modelle eşleşmez.
Dosya tam model nesnesi olarak kaydedilmişse yalnızca
Yükleme tamamlandıktan sonra modelin gerçekten kullanılabilir olduğunu kanıtlamak için en az bir doğru şekilli örnekle çıkarım yapın. Hatasız yükleme, modelin doğru sınıf etiketlerini, doğru ön işleme ayarlarını veya beklenen doğruluğu koruduğunu tek başına kanıtlamaz; giriş normalleştirme ve sınıf sıralaması da eğitimdekiyle aynı olmalıdır.
state_dict içeriyorsa aynı model sınıfını oluşturup load_state_dict() çağırmalısınız; tam model ya da sözlük biçiminde bir kontrol noktasıysa yüklenen nesnenin yapısına göre ilerlemelisiniz. Dosya güvenilir değilse doğrudan yüklemeyin; serileştirilmiş model dosyaları çalıştırma riski taşıyabilir.PTH dosyasında hangi veri bulunur?
.pth uzantısı PyTorch için zorunlu ve tek bir dosya biçimi anlamına gelmez. Genellikle şu içeriklerden biri kaydedilir:| İçerik | Yükleme yaklaşımı | Ne gerekir? |
|---|---|---|
Model state_dict | Modeli oluşturup load_state_dict() kullanılır | Model sınıfının mimarisi ve katman adları |
| Optimizasyon durumu | Eğitime devam ederken iyileştiriciye yüklenir | Aynı iyileştirici türü ve eğitim ayarları |
| Kontrol noktası sözlüğü | İlgili anahtarlar ayrıştırılır | Sözlükteki anahtar adları |
| Tam model nesnesi | Serileştirilmiş nesne olarak açılır | Dosyanın üretildiği kod ve sınıf yapısı |
state_dict dosyasını doğrudan tahmin yapacak bir model gibi kullanamazsınız. state_dict, katman adlarıyla tensör değerlerini içeren bir sözlüktür; model mimarisini tek başına taşımaz.Yalnızca state_dict yükleme
Aşağıdaki varsayımsal örnekte önce aynı ağ tanımlanır, sonra
model_weights.pth dosyasındaki ağırlıklar yüklenir. Dosyanın gerçekten bu mimariyle kaydedilmiş olması gerekir.
Python:
import torch
from torch import nn
class BasitModel(nn.Module):
def __init__(self):
super().__init__()
self.layers = nn.Sequential(
nn.Linear(4, 8),
nn.ReLU(),
nn.Linear(8, 2)
)
def forward(self, x):
return self.layers(x)
model = BasitModel()
weights = torch.load(
"model_weights.pth",
map_location="cpu",
weights_only=True
)
model.load_state_dict(weights)
model.eval()
sample = torch.tensor([[0.1, 0.2, 0.3, 0.4]])
with torch.inference_mode():
output = model(sample)
print(output)
Bu örnekte giriş tensörünün şekli
[1, 4] olduğu için model iki değer üretir ve çıktı şekli [1, 2] olur. Bu değerler, modelin eğitimine göre sınıf puanları veya başka tahmin değerleri olabilir; yalnızca iki sayı görülmesi, sınıf etiketlerinin otomatik olarak bilindiği anlamına gelmez.Dosya yükleme adımları
- PyTorch'u ve model sınıfını hazırlayın. Yükleme kodunda, PTH dosyası kaydedilirken kullanılan mimariyle aynı katmanları ve katman adlarını tanımlayın.
- Dosya yolunu belirtin.
model_weights.pthyerine gerçek dosya yolunu yazın; dosya bulunamazsaFileNotFoundErroralırsınız. - Ağırlıkları CPU üzerinde okuyun.
map_location="cpu"ifadesi, dosya GPU üzerinde kaydedilmiş olsa bile CPU kullanan bilgisayarda yüklemeyi kolaylaştırır. - Ağırlıkları modele aktarın.
load_state_dict()başarılı biçimde tamamlanırsa katman adları ve tensör şekilleri modelle uyumludur; eksik veya beklenmeyen anahtar hataları mimarinin eşleşmediğini gösterir. - Çıkarım kipine geçin.
model.eval()çağrısı, özellikle bırakma ve yığın normalleştirme gibi katmanların değerlendirme davranışını kullanmasını sağlar. - Küçük bir girdiyle sonucu doğrulayın. Girdinin boyutu eğitimdeki beklentiyle aynı olmalı;
output.shapeve gerekiyorsa çıktı değerleri kontrol edilmelidir.
Kontrol noktası sözlüğü yükleme
Eğitime devam etmek için dosya çoğu zaman tek bir ağırlık sözlüğü değil, birden fazla alan içeren kontrol noktasıdır. Örneğin kaydetme kodu şöyle olabilir:
Python:
torch.save({
"epoch": epoch,
"model_state_dict": model.state_dict(),
"optimizer_state_dict": optimizer.state_dict(),
"loss": loss,
}, "checkpoint.pth")
Böyle bir dosyada doğrudan
model.load_state_dict(checkpoint) çağırmak doğru değildir; model ağırlıkları model_state_dict anahtarının altındadır.
Python:
checkpoint = torch.load(
"checkpoint.pth",
map_location="cpu",
weights_only=True
)
model.load_state_dict(checkpoint["model_state_dict"])
optimizer.load_state_dict(checkpoint["optimizer_state_dict"])
start_epoch = checkpoint["epoch"] + 1
last_loss = checkpoint["loss"]
model.train()
print("Devam edilecek dönem:", start_epoch)
print("Son kayıp:", last_loss)
Bu kod model ve iyileştirici durumunu geri getirir; ancak eğitim döngüsünü kendiliğinden başlatmaz.
start_epoch değerini eğitim kodunuzda kullanmanız ve veri hazırlama ayarlarını da aynı biçimde kurmanız gerekir.Yükleme hatalarının anlamı
Missing key veya Unexpected key hataları çoğunlukla model sınıfındaki katman adlarının kaydedilen dosyayla aynı olmadığını gösterir. Size mismatch ise bir katmanın tensör boyutunun değiştiğine işaret eder; örneğin eğitimde 10 sınıf için kurulan son katman 2 sınıflı bir modelle eşleşmez.
Dosya tam model nesnesi olarak kaydedilmişse yalnızca
state_dict yükleyen kod çalışmayabilir. Bu durumda dosyanın üretildiği sınıf tanımı ve çalışma ortamı gerekebilir. Güvenilmeyen dosyalarda tam nesne yükleme kullanmayın; mümkünse dosyayı üreten kişiden yalnızca ağırlıkların veya açıkça tanımlanmış bir kontrol noktası sözlüğünün yeniden paylaşılmasını isteyin.Yükleme tamamlandıktan sonra modelin gerçekten kullanılabilir olduğunu kanıtlamak için en az bir doğru şekilli örnekle çıkarım yapın. Hatasız yükleme, modelin doğru sınıf etiketlerini, doğru ön işleme ayarlarını veya beklenen doğruluğu koruduğunu tek başına kanıtlamaz; giriş normalleştirme ve sınıf sıralaması da eğitimdekiyle aynı olmalıdır.