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

PyTorch'ta özel veri yükleyici nasıl hazırlanır?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
PyTorch’ta özel veri yükleyici hazırlamak için önce tek bir örneğin nasıl okunacağını Dataset sınıfında tanımlayın; ardından DataLoader ile bu örnekleri mini gruplar hâlinde alın. Böylece veri okuma mantığı modelden ayrılır. İlk kontrolde yalnızca bir örneğin ve bir grubun şekline, veri türüne ve etiket eşleşmesine bakmak, eğitim sırasında görünen pek çok hatayı daha erken bulmanızı sağlar.

Bu rehber, bellekteki küçük ve temsili bir tablo için indeksle erişilen, yani map-style Dataset oluşturur. Dosya, model veya veri kümesi indirmez. Gerçek CSV ya da görsel verisine geçtiğinizde değişecek bölüm, örneği yükleyen kodunuzdur. Temel ayrım için resmî Dataset ve DataLoader rehberine bakabilirsiniz.

Dataset hangi görevleri üstlenir?​


__len__() örnek sayısını döndürür; __getitem__(index) ise istenen tek örneği ve onun etiketini getirir. Burada tek örneğin iki sayısal özelliği vardır. Beş örnekten oluşan özellik tensörünün şekli (5, 2), etiket tensörünün şekli (5,) olacaktır.

Aşağıdaki etiketler iki sınıfın numaralarıdır. Bunlar ölçülmüş bir başarı sonucu ya da gerçek müşteri verisi değildir. Çok sınıflı bir modelde sınıf indeksiyle CrossEntropyLoss kullanacaksanız etiketlerin torch.long türünde ve geçerli sınıf aralığında olması gerekir. Regresyon veya çok etiketli bir problemde hedef biçimini aynı şekilde kopyalamayın; kayıp fonksiyonunun gereksinimini esas alın.

Çalışan bir özel Dataset ve DataLoader örneği​


PyTorch’un kurulu olduğu bir Python ortamında şu kodu çalıştırın:

Python:
import torch
from torch.utils.data import Dataset, DataLoader

class OrnekVeri(Dataset):
    def __init__(self, features, labels):
        if features.ndim != 2 or labels.ndim != 1:
            raise ValueError("Ozellikler 2B, etiketler 1B olmali.")
        if len(features) != len(labels):
            raise ValueError("Ozellik ve etiket sayisi ayni olmali.")
        self.features = features
        self.labels = labels

    def __len__(self):
        return len(self.labels)

    def __getitem__(self, index):
        return self.features[index], self.labels[index]

def main():
    features = torch.tensor([
        [0.1, 1.0],
        [0.2, 0.8],
        [0.3, 0.6],
        [0.4, 0.4],
        [0.5, 0.2],
    ], dtype=torch.float32)
    labels = torch.tensor([0, 1, 0, 1, 0], dtype=torch.long)

    dataset = OrnekVeri(features, labels)
    loader = DataLoader(
        dataset, batch_size=2, shuffle=True,
        num_workers=0, drop_last=False
    )

    for batch_x, batch_y in loader:
        print(tuple(batch_x.shape), tuple(batch_y.shape), batch_y.dtype)

if __name__ == "__main__":
    main()

Şekiller şu sırayla görülür:

Kod:
(2, 2) (2,) torch.int64
(2, 2) (2,) torch.int64
(1, 2) (1,) torch.int64

Karıştırma, bir grubun içindeki örneklerin kimliğini değiştirebilir; özellik ile kendi etiketi birlikte gelir. Son grupta yalnız bir örnek kalması normaldir. Sınıfın başlangıç kontrolü şekilleri ve örnek sayılarını denetler; gerçek verinizin etiket aralığını, sayısal türlerini ve eksik değerlerini ayrıca doğrulayın.

Yükleyici ayarlarını amaca göre seçin​

AyarBu örnekteki seçimAnlamı
batch_size2Bir adımda en fazla iki örnek alınır.
shuffleTrueBu map-style veri kümesinin örnek sırası her tur için karıştırılır.
drop_lastFalseEksik kalan son grup da döndürülür.
num_workers0Veri ana süreçte yüklenir; ilk hata incelemesi kolaylaşır.
Doğrulama ve test için eğitimden ayrı örnekler kullanın. Değerlendirme yükleyicisinde genellikle shuffle=False ve drop_last=False seçin; böylece sıralamayı izlemek ve bütün örnekleri değerlendirmek kolaylaşır. DataLoader oluşturmak, veriyi kendiliğinden eğitim ve test kümelerine ayırmaz. Ayarların ayrıntıları resmî veri yükleme belgesinde açıklanır.

Kendi dosyalarınıza geçirirken neyi değiştirmelisiniz?​


Küçük verilerde tabloyu başlangıçta belleğe alabilirsiniz. Büyük dosyalarda ise dosya yollarını ve etiketleri saklayıp istenen örneği __getitem__() içinde okuyun. Her çağrıda bütün veri kümesini yeniden okumayın. Özellik ile etiketin aynı kayda ait olduğunu tek örnek üzerinde kontrol edin; satır sıralamasının değişmesi bu eşleşmeyi sessizce bozabilir.

Önce dataset[0] çıktısını inceleyin, sonra bir mini grubun biçimini kontrol edin. Beklenen şekli bulmadan modele geçmeyin. Ölçekleme gibi veriden öğrenilen dönüşümlerin kurallarını yalnız eğitim verisinde belirleyin ve aynı kuralları doğrulama verisine uygulayın.

Windows’ta worker sayısı artırılmalı mı?​


İlk denemeyi num_workers=0 ile yapın. Daha fazla worker her veri kümesinde hız kazandırmaz; dosya okuma maliyeti, işlemci ve bellek kullanımını ölçerek karar verin. Windows’ta çok süreçli yükleme için Dataset sınıfını dosyanın üst düzeyinde tutun; yükleyiciyi oluşturup dolaşan kodu örnekteki if __name__ == "__main__": koruması içinde çalıştırın. Bu düzen, worker açılırken ana kodun tekrar çalışmasını önler. PyTorch Windows açıklaması bu ayrımı ele alır.

Sık sorulan sorular​

Neden son grubun boyutu farklı?​

Beş örnek ikişer gruplandığında son grupta bir örnek kalır. drop_last=True seçilirse bu son örnek o turda kullanılmaz; bunu yalnız eğitim işleminiz gerektiriyorsa seçin.

Örnek boyutları farklıysa neden gruplama hatası alıyorum?​

Varsayılan tensör gruplaması, örnekleri ortak bir grup boyutunda birleştirebilmelidir. Değişken uzunluklu dizilerde uygun doldurma ve maskeleme ya da özel bir collate_fn gerekebilir. Sorunu önce iki örneğin şekillerini karşılaştırarak bulun; worker sayısını artırmak biçim uyuşmazlığını çözmez.
 

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.
Geri
Üst