Data Augmentation

Kategori: Deep Learning , 25 Nisan 2020 , JanFranco


Data augmentation, özellikle küçük veri setlerinde, başarımı artırmak için verilerin çeşitli bozulma etkilerine maruz bırakılarak artırılmasıdır. Bu şekilde modelin farklı koşulları da öğrenmesinin sağlanmaktadır. Başlıca avantajları verisetinin büyütülmesi ve overfittingin önüne geçilmesidir. Keras kütüphanesinde hazır olarak bulunan MNIST veriseti üzerinden örneklerle gösterelim. İlk olarak MNIST verisetini parçalara bölelim ve bir kaç resim gösterelim:


from keras.datasets import mnist
from matplotlib import pyplot

(x_train, y_train), (x_test, y_test) = mnist.load_data()

for i in range(9):
    pyplot.subplot(330 + 1 + i)
    pyplot.imshow(x_train[i], cmap=pyplot.get_cmap('gray'))
    
pyplot.show()
>>



Şimdi ImageDataGenerator methodu ile veri artırımı yapalım. İlk kullanacağımız özellik rotation yani döndürme olacak. Döndürme açısını 60 derece yapalım ve sonuçları görelim:


from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rotation_range=60)
train_datagen.fit(x_train)

for x_batch, y_batch in train_datagen.flow(x_train, y_train, batch_size=9):
    for i in range(0, 9):
        pyplot.subplot(330 + 1 + i)
        pyplot.imshow(x_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray'))
    pyplot.show()
    break
>>



Bu sefer veri artırım tekniğini zoom ve shear özellikleri ile deneyelim. İki özelliğin de range değerini 0.5 belirleyeceğiz. shear özelliği, resmin perspektifini kaydırmakta, zoom özelliği ise resmi yakınlaştırmakta yani büyütmektedir:


train_datagen = ImageDataGenerator(shear_range=0.5, zoom_range=0.5)
train_datagen.fit(x_train)

for x_batch, y_batch in train_datagen.flow(x_train, y_train, batch_size=9):
    for i in range(9):
        pyplot.subplot(330 + 1 + i)
        pyplot.imshow(x_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray'))
    pyplot.show()
    break
>>



Bu sefer de horizontal ve vertical flip özelliklerini inceleyelim. Horizontal flip, resmin y eksenine göre simetrisini alırken, vertical flip resmin x eksenine göre simetrisini alır:


train_datagen = ImageDataGenerator(vertical_flip=True, horizontal_flip=True)
train_datagen.fit(x_train)

for x_batch, y_batch in train_datagen.flow(x_train, y_train, batch_size=9):
    for i in range(9):
        pyplot.subplot(330 + 1 + i)
        pyplot.imshow(x_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray'))
    pyplot.show()
    break
>>



Son olarak shifting özelliğini görelim. Shift işleminde resim sağa, sola, yukarı veya aşağıya kaydırılır:


train_datagen = ImageDataGenerator(width_shift_range=0.3, height_shift_range=0.3)
train_datagen.fit(x_train)

for x_batch, y_batch in train_datagen.flow(x_train, y_train, batch_size=9):
    for i in range(9):
        pyplot.subplot(330 + 1 + i)
        pyplot.imshow(x_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray'))
    pyplot.show()
    break
>>



Tüm özellikleri hep birlikte uygulayalım:


train_datagen = ImageDataGenerator(
        rotation_range=45,
        width_shift_range=0.2,
        height_shift_range=0.2,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest')

train_datagen.fit(x_train)

for x_batch, y_batch in train_datagen.flow(x_train, y_train, batch_size=9):
    for i in range(9):
        pyplot.subplot(330 + 1 + i)
        pyplot.imshow(x_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray'))
    pyplot.show()
    break
>>


Sonraki Yazı: Callbacks, Checkpoints, EarlyStopping
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın