.. _sec_image_augmentation: İmge Artırması ============== :numref:`sec_alexnet` içinde, büyük veri kümelerinin, çeşitli uygulamalarda derin sinir ağlarının başarısı için bir ön koşul olduğunu belirttik. *İmge artırma* eğitim imgelerinde bir dizi rastgele değişiklikten sonra benzer ama farklı eğitim örnekleri üretir ve böylece eğitim kümesinin boyutunu genişletir. Alternatif olarak, imge artırma, eğitim örneklerinin rastgele ayarlanması modellerin belirli niteliklere daha az güvenmesine ve böylece genelleme yeteneklerini geliştirmesine izin vermesi gerçeğiyle motive edilebilir. Örneğin, bir imgeyi, ilgi nesnesinin farklı pozisyonlarda görünmesini sağlamak için farklı şekillerde kırpabiliriz, böylece bir modelin nesnenin konumuna bağımlılığını azaltabiliriz. Ayrıca, modelin renge duyarlılığını azaltmak için parlaklık ve renk gibi faktörleri de ayarlayabiliriz. Muhtemelen zamanında imge artırmanın AlexNet'in başarısı için vazgeçilmez olduğu doğrudur. Bu bölümde bilgisayarla görmede yaygın olarak kullanılan bu tekniği tartışacağız. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python %matplotlib inline from d2l import mxnet as d2l from mxnet import autograd, gluon, image, init, np, npx from mxnet.gluon import nn npx.set_np() .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python %matplotlib inline import torch import torchvision from torch import nn from d2l import torch as d2l .. raw:: html
.. raw:: html
Yaygın İmge Artırma Yöntemleri ------------------------------ Yaygın imge artırma yöntemlerini incelememizde, aşağıdaki :math:`400\times 500` imgesini bir örnek olarak kullanacağız. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python d2l.set_figsize() img = image.imread('../img/cat1.jpg') d2l.plt.imshow(img.asnumpy()); .. figure:: output_image-augmentation_7d0887_12_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python d2l.set_figsize() img = d2l.Image.open('../img/cat1.jpg') d2l.plt.imshow(img); .. figure:: output_image-augmentation_7d0887_15_0.svg .. raw:: html
.. raw:: html
Çoğu imge artırma yönteminin belirli bir rastgelelik derecesi vardır. İmge artırmanın etkisini gözlemlememizi kolaylaştırmak için, sonraki adımda ``apply`` yardımcı bir işlev tanımlıyoruz. Bu işlev ``img`` girdi imgesinde ``aug`` imge artırma yöntemini birden çok kez çalıştırır ve tüm sonuçları gösterir. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def apply(img, aug, num_rows=2, num_cols=4, scale=1.5): Y = [aug(img) for _ in range(num_rows * num_cols)] d2l.show_images(Y, num_rows, num_cols, scale=scale) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def apply(img, aug, num_rows=2, num_cols=4, scale=1.5): Y = [aug(img) for _ in range(num_rows * num_cols)] d2l.show_images(Y, num_rows, num_cols, scale=scale) .. raw:: html
.. raw:: html
Döndürme ve Kırpma ~~~~~~~~~~~~~~~~~~ .. raw:: html
mxnetpytorch
.. raw:: html
Resmin sola ve sağa doğru döndürülmesi genellikle nesnenin kategorisini değiştirmez. Bu, en eski ve en yaygın kullanılan imge artırma yöntemlerinden biridir. Daha sonra, ``transforms`` modülünü ``RandomFlipLeftRight`` örneğini oluşturmak için kullanıyoruz, ki imgeyi sola ve sağa döndürebiliriz. .. raw:: latex \diilbookstyleinputcell .. code:: python apply(img, gluon.data.vision.transforms.RandomFlipLeftRight()) .. figure:: output_image-augmentation_7d0887_31_0.svg Yukarı ve aşağı döndürme sola ve sağa döndürmek kadar yaygın değildir. Ancak en azından bu örnek imge için, yukarı ve aşağı döndürmek tanımayı engellemez. Ardından, bir imgeyi %50 şansla yukarı ve aşağı döndürmek için ``RandomFlipTopBottom`` örneği oluşturuyoruz. .. raw:: latex \diilbookstyleinputcell .. code:: python apply(img, gluon.data.vision.transforms.RandomFlipTopBottom()) .. figure:: output_image-augmentation_7d0887_33_0.svg .. raw:: html
.. raw:: html
Resmin sola ve sağa doğru döndürülmesi genellikle nesnenin kategorisini değiştirmez. Bu, en eski ve en yaygın kullanılan imge artırma yöntemlerinden biridir. Daha sonra, ``transforms`` modülünü ``RandomHorizontalFlip`` örneğini oluşturmak için kullanıyoruz, ki imgeyi sola ve sağa döndürebiliriz. .. raw:: latex \diilbookstyleinputcell .. code:: python apply(img, torchvision.transforms.RandomHorizontalFlip()) .. figure:: output_image-augmentation_7d0887_37_0.svg Yukarı ve aşağı döndürme sola ve sağa döndürmek kadar yaygın değildir. Ancak en azından bu örnek imge için, yukarı ve aşağı döndürmek tanımayı engellemez. Ardından, bir imgeyi %50 şansla yukarı ve aşağı döndürmek için ``RandomVerticalFlip`` örneği oluşturuyoruz. .. raw:: latex \diilbookstyleinputcell .. code:: python apply(img, torchvision.transforms.RandomVerticalFlip()) .. figure:: output_image-augmentation_7d0887_39_0.svg .. raw:: html
.. raw:: html
Kullandığımız örnek imgede, kedi imgenin ortasındadır, ancak bu genel olarak böyle olmayabilir. :numref:`sec_pooling` içinde, ortaklama katmanının evrişimli bir katmanın hedef konuma duyarlılığını azaltabileceğini açıkladık. Buna ek olarak, nesnelerin imgedeki farklı ölçeklerde farklı konumlarda görünmesini sağlamak için imgeyi rastgele kırpabiliriz, bu da bir modelin hedef konuma duyarlılığını da azaltabilir. Aşağıdaki kodda, her seferinde orijinal alanın :math:`\%10 \sim \%100` alanı olan bir alanı rastgele kırpıyoruz ve bu alanın genişliğinin yüksekliğine oranı :math:`0.5 \sim 2`'den rastgele seçilir. Ardından, bölgenin genişliği ve yüksekliği 200 piksele ölçeklenir. Aksi belirtilmedikçe, bu bölümdeki :math:`a` ile :math:`b` arasındaki rastgele sayı, :math:`[a, b]` aralığından rastgele ve tek biçimli örneklemeyle elde edilen sürekli bir değeri ifade eder. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python shape_aug = gluon.data.vision.transforms.RandomResizedCrop( (200, 200), scale=(0.1, 1), ratio=(0.5, 2)) apply(img, shape_aug) .. figure:: output_image-augmentation_7d0887_45_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python shape_aug = torchvision.transforms.RandomResizedCrop( (200, 200), scale=(0.1, 1), ratio=(0.5, 2)) apply(img, shape_aug) .. figure:: output_image-augmentation_7d0887_48_0.svg .. raw:: html
.. raw:: html
Renkleri Değiştirme ~~~~~~~~~~~~~~~~~~~ Diğer bir artırma yöntemi ise renkleri değiştirmektir. İmge renginin dört cephesini değiştirebiliriz: Parlaklık, zıtlık, doygunluk ve renk tonu. Aşağıdaki örnekte, imgenin parlaklığını orijinal imgenin %50'si (:math:`1-0.5`) ile %150'si (:math:`1+0.5`) arasında bir değere değiştiriyoruz. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python apply(img, gluon.data.vision.transforms.RandomBrightness(0.5)) .. figure:: output_image-augmentation_7d0887_54_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python apply(img, torchvision.transforms.ColorJitter( brightness=0.5, contrast=0, saturation=0, hue=0)) .. figure:: output_image-augmentation_7d0887_57_0.svg .. raw:: html
.. raw:: html
Benzer şekilde, imgenin tonunu rastgele değiştirebiliriz. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python apply(img, gluon.data.vision.transforms.RandomHue(0.5)) .. figure:: output_image-augmentation_7d0887_63_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python apply(img, torchvision.transforms.ColorJitter( brightness=0, contrast=0, saturation=0, hue=0.5)) .. figure:: output_image-augmentation_7d0887_66_0.svg .. raw:: html
.. raw:: html
Ayrıca bir ``RandomColorJitter`` örneği oluşturabilir ve imgenin ``brightness`` (parlaklık), ``contrast`` (zıtlık), ``saturation`` (doygunluk) ve ``hue``'ini (renk tonu) aynı anda nasıl rastgele değiştirebileceğimizi ayarlayabiliriz. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python color_aug = gluon.data.vision.transforms.RandomColorJitter( brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5) apply(img, color_aug) .. figure:: output_image-augmentation_7d0887_72_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python color_aug = torchvision.transforms.ColorJitter( brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5) apply(img, color_aug) .. figure:: output_image-augmentation_7d0887_75_0.svg .. raw:: html
.. raw:: html
Çoklu İmge Artırma Yöntemlerini Birleştirme ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Pratikte, birden fazla imge artırma yöntemini birleştireceğiz. Örneğin, yukarıda tanımlanan farklı imge artırma yöntemlerini birleştirebilir ve bunları bir ``Compose`` (beste) örneği aracılığıyla her imgeye uygulayabiliriz. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python augs = gluon.data.vision.transforms.Compose([ gluon.data.vision.transforms.RandomFlipLeftRight(), color_aug, shape_aug]) apply(img, augs) .. figure:: output_image-augmentation_7d0887_81_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python augs = torchvision.transforms.Compose([ torchvision.transforms.RandomHorizontalFlip(), color_aug, shape_aug]) apply(img, augs) .. figure:: output_image-augmentation_7d0887_84_0.svg .. raw:: html
.. raw:: html
İmge Artırması ile Eğitim ------------------------- İmge artırma ile bir model eğitelim. Burada daha önce kullandığımız Fashion-MNIST veri kümesi yerine CIFAR-10 veri kümesini kullanıyoruz. Bunun nedeni, Fashion-MNIST veri kümesindeki nesnelerin konumu ve boyutu normalleştirilirken, CIFAR-10 veri kümesindeki nesnelerin rengi ve boyutunun daha önemli farklılıklara sahip olmasıdır. CIFAR-10 veri kümelerindeki ilk 32 eğitim imgesi aşağıda gösterilmiştir. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python d2l.show_images(gluon.data.vision.CIFAR10( train=True)[0:32][0], 4, 8, scale=0.8); .. figure:: output_image-augmentation_7d0887_90_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python all_images = torchvision.datasets.CIFAR10(train=True, root="../data", download=True) d2l.show_images([all_images[i][0] for i in range(32)], 4, 8, scale=0.8); .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output Files already downloaded and verified .. figure:: output_image-augmentation_7d0887_93_1.svg .. raw:: html
.. raw:: html
Tahmin sırasında kesin sonuçlar elde etmek için genellikle sadece eğitim örneklerine imge artırma uygularız ve tahmin sırasında rastgele işlemlerle imge artırma kullanmayız. Burada sadece en basit rastgele sol-sağ döndürme yöntemini kullanıyoruz. Buna ek olarak, bir minigrup imgeyi derin öğrenme çerçevesinin gerektirdiği biçime dönüştürmek için ``ToTensor`` örneğini kullanıyoruz, yani 0 ile 1 arasında 32 bit kayan virgüllü sayıları (toplu iş boyutu, kanal sayısı, yükseklik, genişlik) şeklindedirler. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python train_augs = gluon.data.vision.transforms.Compose([ gluon.data.vision.transforms.RandomFlipLeftRight(), gluon.data.vision.transforms.ToTensor()]) test_augs = gluon.data.vision.transforms.Compose([ gluon.data.vision.transforms.ToTensor()]) Ardından, imgeyi okumayı ve imge artırmasını uygulamayı kolaylaştırmak için yardımcı bir işlev tanımlıyoruz. Gluon'un veri kümeleri tarafından sağlanan ``transform_first`` işlevi, her eğitim örneğinin (imge ve etiket) ilk öğesine (resim ve etiket) imge artırma işlemini uygular. ``DataLoader``'ya ayrıntılı bir giriş için lütfen :numref:`sec_fashion_mnist`'e bakın. .. raw:: latex \diilbookstyleinputcell .. code:: python def load_cifar10(is_train, augs, batch_size): return gluon.data.DataLoader( gluon.data.vision.CIFAR10(train=is_train).transform_first(augs), batch_size=batch_size, shuffle=is_train, num_workers=d2l.get_dataloader_workers()) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python train_augs = torchvision.transforms.Compose([ torchvision.transforms.RandomHorizontalFlip(), torchvision.transforms.ToTensor()]) test_augs = torchvision.transforms.Compose([ torchvision.transforms.ToTensor()]) Ardından, imgeyi okumayı ve imge artırmasını uygulamayı kolaylaştırmak için yardımcı bir işlev tanımlar. PyTorch'un veri kümesi tarafından sağlanan ``transform`` bağımsız değişkeni, imgeleri döndürmek için artırma uygular. ``DataLoader``'a ayrıntılı bir giriş için lütfen :numref:`sec_fashion_mnist` kısmına bakın. .. raw:: latex \diilbookstyleinputcell .. code:: python def load_cifar10(is_train, augs, batch_size): dataset = torchvision.datasets.CIFAR10(root="../data", train=is_train, transform=augs, download=True) dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=is_train, num_workers=d2l.get_dataloader_workers()) return dataloader .. raw:: html
.. raw:: html
Çoklu-GPU Eğitimi ~~~~~~~~~~~~~~~~~ ResNet-18 modelini :numref:`sec_resnet` içindeki CIFAR-10 veri kümesi üzerinde eğitiyoruz. :numref:`sec_multi_gpu_concise` kısmından çoklu GPU eğitimine girişi hatırlayın. Aşağıda, birden çok GPU kullanarak modeli eğitmek ve değerlendirmek için bir işlev tanımlıyoruz. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python #@save def train_batch_ch13(net, features, labels, loss, trainer, devices, split_f=d2l.split_batch): """Birden çok GPU'lu bir minigrup için eğitim (Bölüm 13'te tanımlanmıştır).""" X_shards, y_shards = split_f(features, labels, devices) with autograd.record(): pred_shards = [net(X_shard) for X_shard in X_shards] ls = [loss(pred_shard, y_shard) for pred_shard, y_shard in zip(pred_shards, y_shards)] for l in ls: l.backward() # `True` bayrağı, daha sonra yararlı olan eski gradyanlara sahip parametrelere izin verir (örneğin, BERT ince ayarında) trainer.step(labels.shape[0], ignore_stale_grad=True) train_loss_sum = sum([float(l.sum()) for l in ls]) train_acc_sum = sum(d2l.accuracy(pred_shard, y_shard) for pred_shard, y_shard in zip(pred_shards, y_shards)) return train_loss_sum, train_acc_sum #@save def train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs, devices=d2l.try_all_gpus(), split_f=d2l.split_batch): """Birden çok GPU'lu bir modeli eğitin (Bölüm 13'te tanımlanmıştır).""" timer, num_batches = d2l.Timer(), len(train_iter) animator = d2l.Animator(xlabel='epoch', xlim=[1, num_epochs], ylim=[0, 1], legend=['train loss', 'train acc', 'test acc']) for epoch in range(num_epochs): # Eğitim kaybının toplamı, eğitim doğruluğunun toplamı, örneklerin sayısı, tahminlerin sayısı metric = d2l.Accumulator(4) for i, (features, labels) in enumerate(train_iter): timer.start() l, acc = train_batch_ch13( net, features, labels, loss, trainer, devices, split_f) metric.add(l, acc, labels.shape[0], labels.size) timer.stop() if (i + 1) % (num_batches // 5) == 0 or i == num_batches - 1: animator.add(epoch + (i + 1) / num_batches, (metric[0] / metric[2], metric[1] / metric[3], None)) test_acc = d2l.evaluate_accuracy_gpus(net, test_iter, split_f) animator.add(epoch + 1, (None, None, test_acc)) print(f'loss {metric[0] / metric[2]:.3f}, train acc ' f'{metric[1] / metric[3]:.3f}, test acc {test_acc:.3f}') print(f'{metric[2] * num_epochs / timer.sum():.1f} examples/sec on ' f'{str(devices)}') .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python #@save def train_batch_ch13(net, X, y, loss, trainer, devices): """Birden çok GPU'lu bir minigrup için eğitim (Bölüm 13'te tanımlanmıştır).""" if isinstance(X, list): # BERT ince ayarı için gerekli (daha sonra ele alınacaktır) X = [x.to(devices[0]) for x in X] else: X = X.to(devices[0]) y = y.to(devices[0]) net.train() trainer.zero_grad() pred = net(X) l = loss(pred, y) l.sum().backward() trainer.step() train_loss_sum = l.sum() train_acc_sum = d2l.accuracy(pred, y) return train_loss_sum, train_acc_sum #@save def train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs, devices=d2l.try_all_gpus()): """Birden çok GPU'lu bir modeli eğitin (Bölüm 13'te tanımlanmıştır).""" timer, num_batches = d2l.Timer(), len(train_iter) animator = d2l.Animator(xlabel='epoch', xlim=[1, num_epochs], ylim=[0, 1], legend=['train loss', 'train acc', 'test acc']) net = nn.DataParallel(net, device_ids=devices).to(devices[0]) for epoch in range(num_epochs): # Eğitim kaybının toplamı, eğitim doğruluğunun toplamı, örneklerin sayısı, tahminlerin sayısı metric = d2l.Accumulator(4) for i, (features, labels) in enumerate(train_iter): timer.start() l, acc = train_batch_ch13( net, features, labels, loss, trainer, devices) metric.add(l, acc, labels.shape[0], labels.numel()) timer.stop() if (i + 1) % (num_batches // 5) == 0 or i == num_batches - 1: animator.add(epoch + (i + 1) / num_batches, (metric[0] / metric[2], metric[1] / metric[3], None)) test_acc = d2l.evaluate_accuracy_gpu(net, test_iter) animator.add(epoch + 1, (None, None, test_acc)) print(f'loss {metric[0] / metric[2]:.3f}, train acc ' f'{metric[1] / metric[3]:.3f}, test acc {test_acc:.3f}') print(f'{metric[2] * num_epochs / timer.sum():.1f} examples/sec on ' f'{str(devices)}') .. raw:: html
.. raw:: html
Şimdi modeli imge artırma ile eğitmek için ``train_with_data_aug`` işlevini tanımlayabiliriz. Bu işlev mevcut tüm GPU'ları alır, optimizasyon algoritması olarak Adam'ı kullanır, eğitim veri kümesine imge artırma uygular ve son olarak modeli eğitmek ve değerlendirmek için tanımlanmış ``train_ch13`` işlevini çağırır. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python batch_size, devices, net = 256, d2l.try_all_gpus(), d2l.resnet18(10) net.initialize(init=init.Xavier(), ctx=devices) def train_with_data_aug(train_augs, test_augs, net, lr=0.001): train_iter = load_cifar10(True, train_augs, batch_size) test_iter = load_cifar10(False, test_augs, batch_size) loss = gluon.loss.SoftmaxCrossEntropyLoss() trainer = gluon.Trainer(net.collect_params(), 'adam', {'learning_rate': lr}) train_ch13(net, train_iter, test_iter, loss, trainer, 10, devices) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python batch_size, devices, net = 256, d2l.try_all_gpus(), d2l.resnet18(10, 3) def init_weights(m): if type(m) in [nn.Linear, nn.Conv2d]: nn.init.xavier_uniform_(m.weight) net.apply(init_weights) def train_with_data_aug(train_augs, test_augs, net, lr=0.001): train_iter = load_cifar10(True, train_augs, batch_size) test_iter = load_cifar10(False, test_augs, batch_size) loss = nn.CrossEntropyLoss(reduction="none") trainer = torch.optim.Adam(net.parameters(), lr=lr) train_ch13(net, train_iter, test_iter, loss, trainer, 10, devices) .. raw:: html
.. raw:: html
Rastgele sol-sağ döndürmeye dayalı imge artırma kullanarak modeli eğitelim. .. raw:: html
mxnetpytorch
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python train_with_data_aug(train_augs, test_augs, net) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output loss 0.165, train acc 0.943, test acc 0.847 3716.2 examples/sec on [gpu(0), gpu(1)] .. figure:: output_image-augmentation_7d0887_130_1.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python train_with_data_aug(train_augs, test_augs, net) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output loss 0.172, train acc 0.939, test acc 0.845 5522.5 examples/sec on [device(type='cuda', index=0), device(type='cuda', index=1)] .. figure:: output_image-augmentation_7d0887_133_1.svg .. raw:: html
.. raw:: html
Özet ---- - İmge artırma, modellerin genelleme yeteneğini geliştirmek için mevcut eğitim verilerine dayanan rastgele imgeler üretir. - Tahmin sırasında kesin sonuçlar elde etmek için genellikle sadece eğitim örneklerine imge artırma uygularız ve tahmin sırasında rastgele işlemlerle imge artırma kullanmayız. - Derin öğrenme çerçeveleri, aynı anda uygulanabilen birçok farklı imge artırma yöntemi sağlar. Alıştırmalar ------------ 1. İmge artırma özelliğini, ``train_with_data_aug(test_augs, test_augs)``, kullanmadan modeli eğitin. İmge artırmasını kullanırken ve kullanmazken eğitim ve test doğruluğunu karşılaştırın. Bu karşılaştırmalı deney, imge artırmanin aşırı uyumu azaltabileceği argümanını destekleyebilir mi? Neden? 2. CIFAR-10 veri kümesinde model eğitiminde birden çok farklı imge artırma yöntemini birleştirin. Test doğruluğunu arttırıyor mu? 3. Derin öğrenme çerçevesinin çevrimiçi belgelerine bakın. Başka hangi imge artırma yöntemlerini de sağlar? .. raw:: html
mxnetpytorch
.. raw:: html
`Tartışmalar `__ .. raw:: html
.. raw:: html
`Tartışmalar `__ .. raw:: html
.. raw:: html