Garfield
YZF Admin
Veri artırma dönüşümlerini eğitim verisine uygulamak için
Veri artırma, mevcut görüntülerden rastgele yeni görünümler üretir; özgün dosyaları değiştirmez. Yatay çevirme, küçük döndürme, kırpma veya renk değişimi gibi işlemler modelin önemsiz görüntü farklılıklarına daha dayanıklı olmasına yardımcı olabilir. Ancak dönüşüm, sınıf bilgisini bozuyorsa kullanılmamalıdır. Örneğin rakam tanıma probleminde görüntüyü 180 derece döndürmek sınıfı değiştirebilir.
Eğitim için rastgele dönüşümler, doğrulama ve test için sabit dönüşümler seçilebilir:
Tablodaki dönüşümlerin tamamını aynı anda kullanmak zorunda değilsiniz. Özellikle döndürme ve renk değişimi, veri kümesindeki gerçek koşulları temsil etmiyorsa modelin öğrenmesini zorlaştırabilir.
Ön koşul olarak PyTorch ve
Eğitim doğruluğu düşerken doğrulama doğruluğu yükseliyorsa artırma, aşırı öğrenmeyi azaltmış olabilir. Hem eğitim hem doğrulama başarımı düşüyorsa dönüşümler fazla agresif olabilir; örneğin döndürme açısını küçültün,
Standart tek-geçişli test değerlendirmesinde rastgele
torchvision.transforms.Compose içinde rastgele dönüşümleri bir araya getirip veri kümesini bu dönüşümle oluşturun. Standart doğrulama ve test değerlendirmesinde modele uygun, sabit ön işlemleri kullanın. Böylece model farklılaştırılmış eğitim örnekleri görürken başarı ölçümü rastgele artırma uygulanmayan ve aynı biçimde ön işlenen veriler üzerinden yapılır.Eğitim ve doğrulama dönüşümlerini ayırın
Veri artırma, mevcut görüntülerden rastgele yeni görünümler üretir; özgün dosyaları değiştirmez. Yatay çevirme, küçük döndürme, kırpma veya renk değişimi gibi işlemler modelin önemsiz görüntü farklılıklarına daha dayanıklı olmasına yardımcı olabilir. Ancak dönüşüm, sınıf bilgisini bozuyorsa kullanılmamalıdır. Örneğin rakam tanıma probleminde görüntüyü 180 derece döndürmek sınıfı değiştirebilir.
Eğitim için rastgele dönüşümler, doğrulama ve test için sabit dönüşümler seçilebilir:
| Dönüşüm grubu | Amaç | Kullanım |
|---|---|---|
| RandomHorizontalFlip | Görüntüyü belirli olasılıkla yatay çevirir | Nesnenin yönü sınıfı değiştirmiyorsa eğitimde |
| RandomRotation | Görüntüyü rastgele açıyla döndürür | Küçük yön değişimleri geçerliyse eğitimde |
| ColorJitter | Parlaklık, karşıtlık veya doygunluğu değiştirir | Renk koşulları sınıfı belirlemiyorsa eğitimde |
| Resize ve CenterCrop | Görüntü boyutunu model girdisine uyarlar | Eğitim, doğrulama ve testte uygun biçimde |
| ToTensor | Görüntüyü modele verilebilen tensöre çevirir | Genellikle tüm veri kümelerinde |
torchvision ile veri artırma uygulama
Ön koşul olarak PyTorch ve
torchvision kurulu olmalı; görüntü klasörleri sınıflara göre ayrılmış olmalıdır. Aşağıdaki örnekte veri/egitim ve veri/dogrulama klasörlerinin altında sınıf klasörleri bulunduğu varsayılmıştır.- Dönüşüm zincirlerini tanımlayın. Eğitim zincirine rastgele dönüşümleri, doğrulama zincirine ise yalnızca sabit dönüşümleri ekleyin.
Python:from torchvision import datasets, transforms from torch.utils.data import DataLoader train_transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.RandomHorizontalFlip(p=0.5), transforms.RandomRotation(degrees=10), transforms.ColorJitter(brightness=0.2, contrast=0.2), transforms.ToTensor(), ]) valid_transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), ]) train_data = datasets.ImageFolder( "veri/egitim", transform=train_transform ) valid_data = datasets.ImageFolder( "veri/dogrulama", transform=valid_transform ) if train_data.class_to_idx != valid_data.class_to_idx: raise ValueError("Eğitim ve doğrulama sınıf eşlemeleri aynı olmalı.") train_loader = DataLoader(train_data, batch_size=32, shuffle=True) valid_loader = DataLoader(valid_data, batch_size=32, shuffle=False) images, labels = next(iter(train_loader)) print(images.shape) print(labels.shape) - Kodu çalıştırın ve ilk veri grubunu kontrol edin. Önce eğitim ve doğrulama klasörlerinin sınıf adları ile
class_to_idxeşlemelerinin aynı olduğunu doğrulayın. Örnekteki kontrol uyuşmazlıkta işlemi durdurur; uyumsuzluk varsa veri bölmelerini ve etiket eşlemesini düzeltin. Klasör yolları doğruysa çıktı, örneğin 32 görüntü ve 3 renk kanalı için[32, 3, 224, 224]biçiminde olur. Gerçek boyut, klasördeki görüntü sayısına vebatch_sizedeğerine göre değişebilir.
- Eğitim döngüsünde eğitim veri yükleyicisini kullanın. Her yeni örnekte rastgele dönüşümler yeniden uygulanabilir; bu nedenle aynı özgün görüntü farklı eğitim turlarında farklı görünümlerle modele ulaşır.
- Doğrulama sırasında eğitim veri yükleyicisi yerine doğrulama veri yükleyicisini kullanın.
valid_transformiçinde rastgele işlem bulunmadığı için ölçüm daha tutarlı olur. Doğrulama kaybı veya doğruluğu belirgin biçimde değişiyorsa önce veri bölme işlemini, sınıf sıralarını ve görüntü boyutlarını kontrol edin.
Dönüşümlerin sonucu nasıl yorumlanır?
images.shape değerinin dört boyutlu olması, yükleyicinin bir görüntü grubunu modelin beklediği tensör düzeninde ürettiğini gösterir; tek başına dönüşümlerin yararlı olduğunu kanıtlamaz. Yararı değerlendirmek için aynı model ve eğitim ayarlarıyla, veri artırmalı ve artırmasız eğitim sonuçlarını karşılaştırın.Eğitim doğruluğu düşerken doğrulama doğruluğu yükseliyorsa artırma, aşırı öğrenmeyi azaltmış olabilir. Hem eğitim hem doğrulama başarımı düşüyorsa dönüşümler fazla agresif olabilir; örneğin döndürme açısını küçültün,
ColorJitter etkisini azaltın veya sınıf bilgisini bozabilecek dönüşümü kaldırın. Eğitim başarımı çok yüksek, doğrulama başarımı düşük kalıyorsa yalnızca dönüşümleri artırmak yerine veri bölme hatalarını, sınıf dengesini ve modelin kapasitesini de inceleyin.Standart tek-geçişli test değerlendirmesinde rastgele
RandomHorizontalFlip, RandomRotation veya ColorJitter kullanmayın. Test sonucunun her çalıştırmada değişmesi, model değişmeden ölçüm koşulunun da değiştiği anlamına gelir; bu durum modelleri adil biçimde karşılaştırmayı zorlaştırır. Bilinçli olarak test-zamanı artırma (TTA) uygulanacaksa dönüşümleri ve tahminleri birleştirme kuralını tanımlayıp aynı protokolle karşılaştırın; bu değerlendirmeyi ayrıca raporlayın.