Derin Öğrenme (Deep Learning) - Önemli Keras Araçları (Utils)

Resim Sınıflandırma İşlemleri (image_dataset_ from_directory)

Yayın tarihi :11-Mar-22
Bölüm kodlarını ve/veya veri setlerini indir.

image_dataset_from_directory, bir klasör içerisinde birden çok klasör ve bu her klasör içersinde bulunan resimleri sınıflandırmak için kullanılan bir araçtır.

Kullanılabilmesi için "image_dataset_from_directory" kütüphanesinin içe aktarılması gerekmektedir.

from tensorflow.keras.utils import image_dataset_from_directory

Söz dizimi: image_dataset_from_directory(directory, labels='inferred', label_mode='int', class_names=None, color_mode='rgb', batch_size=32, image_size=(256, 256), shuffle=True, seed=None, validation_split=None, subset=None, interpolation='bilinear', follow_links=False, crop_to_aspect_ratio=False, **kwargs)

  • directory, verilerin bulunduğu klasör adresini temsil etmektedir.
  • labels, resimlerin isimlerini temsil etmektedir. Varsayılan olarak "inferred" dir. 
  • label_mode, sınıflandırma işlemleri türüne göre sayısal veya kategorik değerler verilebilir. "int", "categorical" ve "binary" değerlerini alabilir. Varsayılan olarak "int" dir.
  • class_names, alt klasör isimlerini temsil etmektedir.
  • color_mode, resimlerin renklerini temsil etmektedir. "grayscala","rgb" veya "rgba" değerlerini alabilir. Varsayılan olarak "rgb"dir.
  • batch_size, resimleri gruplar halinde tutmak için kullanılır. Varsayılan olarak 32 dir.
  • image_size, resimleri okuduktan sonra tekrar boyutlandırma işlemini temsil etmektedir. Varsayılan olarak (256,256)'dır.
  • shuffle, resimlerin train ve test olarak ayrılırken rastgele bir biçimde karıştırılıp karıştırılmayacağını temsil etmektedir. Varsayılan olarak "True"dır.
  • seed, rasgele karışımların başlangıç noktasını temsil etmektedir.
  • validation_split, verilerin train ve test olarak hangi oranda atama yapılacağını temsil etmektedir.0-1 aralığında değer alabilir.
  • subset, ayrım yapılacak veri setinde ayrılan alanın eğitim mi(training) yoksa test (validation) için mi olacağı belirlenir. "training" veya "validation" değerlerini alabilir.

Örnek-1: 5 farklı çiçek türüne ait resimler 5 farklı klasörde bulunmaktadır. Bu çiçek türleri resimlerini train ve test olarak "image_dataset_from_directory" kullanarak ayıralım.

import matplotlib.pyplot as plt
import pathlib 

from tensorflow.keras.utils import image_dataset_from_directory
data_dir=pathlib.Path("train/Cicekler/")
data_dir

Çıktı:

WindowsPath('train/Cicekler')
#Train verileri
train_ds=image_dataset_from_directory(
    directory=data_dir,
    color_mode="rgb",
    validation_split=0.2,
    seed=13,
    shuffle=True,
    subset="training",
    batch_size=8
)

#Test verileri
test_ds=image_dataset_from_directory(
    directory=data_dir,
    color_mode="rgb",
    validation_split=0.2,
    seed=13,
    shuffle=True,
    subset="validation",  
    batch_size=8
)

Çıktı:

Found 68 files belonging to 5 classes.
Using 55 files for training.
Found 68 files belonging to 5 classes.
Using 13 files for validation.

Yukarıdaki çıktıdan da anlaşılacağı üzere 5 sınıflı bir yapıda toplam 68 tane resim bulunmaktadır. Bu resimlerden (validation_split=0.2 değeri gereğince) 55 tanesi train yapılmak üzere, 13 tanesi de test yapılmak üzere rasgele bir biçimde ayrılmış oldu. Belirtilen 5 tane sınıf isimlerini görüntüleyelim;

class_names=train_ds.class_names
class_names

Çıktı:

['Ayçiçeği', 'Gül', 'Karahindibağ', 'Lale', 'Papatya']

Train ve test için ayrılan resimlerin bazılarını görüntüleyelim.

#Train resimleri
plt.figure(figsize=(15,10))
for image,label in train_ds.take(1):
    for i in range(5):
        ax=plt.subplot(1,5,i+1)
        plt.imshow(image[i].numpy().astype("uint8"))
        plt.title(f"{class_names[label[i]]} ({i})")
        plt.xticks([])
        plt.yticks([])

Çıktı:

#Test resimleri
plt.figure(figsize=(15,10))
for image,label in test_ds.take(1):
    for i in range(5):
        ax=plt.subplot(1,5,i+1)
        plt.imshow(image[i].numpy().astype("uint8"))
        plt.title(f"{class_names[label[i]]} ({i})")
        plt.xticks([])
        plt.yticks([])

Çıktı:


Sonuç olarak; train ve test verileri ayrılmış oldu. Artık mevcut veri setini eğitmek için model oluşturma aşamasına geçilebilir.

Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.