Derin Öğrenme (Deep Learning) - Önemli Keras Araçları (Utils)
Resim Sınıflandırma İşlemleri (image_dataset_ from_directory)
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.