Garfield
YZF Admin
PyTorch’ta özel veri yükleyici hazırlamak için önce tek bir örneğin nasıl okunacağını
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.
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
PyTorch’un kurulu olduğu bir Python ortamında şu kodu çalıştırın:
Şekiller şu sırayla görülür:
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.
Doğrulama ve test için eğitimden ayrı örnekler kullanın. Değerlendirme yükleyicisinde genellikle
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
Önce
İlk denemeyi
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
| Ayar | Bu örnekteki seçim | Anlamı |
|---|---|---|
batch_size | 2 | Bir adımda en fazla iki örnek alınır. |
shuffle | True | Bu map-style veri kümesinin örnek sırası her tur için karıştırılır. |
drop_last | False | Eksik kalan son grup da döndürülür. |
num_workers | 0 | Veri ana süreçte yüklenir; ilk hata incelemesi kolaylaşır. |
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.