• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

PyTorch PTH dosyası nedir ve nasıl yüklenir?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
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 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:
İçerikYükleme yaklaşımıNe gerekir?
Model state_dictModeli oluşturup load_state_dict() kullanılırModel sınıfının mimarisi ve katman adları
Optimizasyon durumuEğitime devam ederken iyileştiriciye yüklenirAynı iyileştirici türü ve eğitim ayarları
Kontrol noktası sözlüğüİlgili anahtarlar ayrıştırılırSözlükteki anahtar adları
Tam model nesnesiSerileştirilmiş nesne olarak açılırDosyanın üretildiği kod ve sınıf yapısı
Bu ayrım önemlidir; bir 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ı​

  1. 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.
  2. Dosya yolunu belirtin. model_weights.pth yerine gerçek dosya yolunu yazın; dosya bulunamazsa FileNotFoundError alırsınız.
  3. 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.
  4. 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.
  5. Çı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.
  6. Küçük bir girdiyle sonucu doğrulayın. Girdinin boyutu eğitimdeki beklentiyle aynı olmalı; output.shape ve 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.
 

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic
Geri
Üst