CNN - Eğitim sonucu acc-val_acc ve loss-val_loss ne anlatıyor?


#1

Merhabalar,

Python, Makine Öğrenmesi ve Deep Learning konularına yeni yeni alışıyorum. Bu sebeble görüntü işleme ve sınıflandırma ile alakalı okul içi bitirme projesi aldım. Konuyla ilgili birkaç makale okuduktan sonra CNN-keras kodu yazmaya başladım.

Sorumu sormadan önce uğraştığım veriyi kısaca anlatayım:

Microscopy images are on .tif format and have the following specifications:

  • Color model: R(ed)G(reen)B(lue)
  • Size: 2048 x 1536 pixels
  • Pixel scale: 0.42 μm x 0.42 μm
  • Memory space: 10-20 MB (approx.)
  • Type of label: image-wise
  • 4 class: benign, invasive, in Situ, normal

Yukarıda belirttiğim gibi veriler 4 sınıfttan oluşmaktadır:

  • Found 249 images belonging to 4 classes.
  • Found 36 images belonging to 4 classes. (verinin bana gelişinde test datası tek dosya içerisinde idi fakat görüntüleri alırken Found 0 images belonging to 0 classes hatası verdiği için 4 adet dosyaya ayırdım. Doğru yaptım mı bilmiyorum.)

CNN kodu:

from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense


classifier = Sequential()


classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Flatten())


classifier.add(Dense(activation = 'relu', units = 128))
classifier.add(Dense(activation = 'softmax', units = 4))


classifier.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])


from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

training_set = train_datagen.flow_from_directory('BioImaging2015/breasthistology/Training_data',
                                                 target_size = (64, 64),
                                                 batch_size = 1,
                                                 class_mode = 'binary')

test_set = test_datagen.flow_from_directory('BioImaging2015/breasthistology/Test_data',
                                            target_size = (64, 64),
                                            batch_size = 1,
                                            class_mode = 'binary')

classifier.fit_generator(training_set,
                         samples_per_epoch = 5000,
                         nb_epoch = 20,
                         validation_data = test_set,
                         nb_val_samples = len(test_set))

Output:

Epoch 1/20
5000/5000 [==============================] - 1056s 211ms/step - loss: 1.3914 - acc: 0.2754 - val_loss: 1.3890 - val_acc: 0.2500
Epoch 2/20
5000/5000 [==============================] - 1056s 211ms/step - loss: 1.2874 - acc: 0.3740 - val_loss: 1.6325 - val_acc: 0.3333
Epoch 3/20
5000/5000 [==============================] - 1056s 211ms/step - loss: 0.7412 - acc: 0.7098 - val_loss: 1.4916 - val_acc: 0.4722
Epoch 4/20
5000/5000 [==============================] - 1056s 211ms/step - loss: 0.3380 - acc: 0.8780 - val_loss: 1.4263 - val_acc: 0.5278
Epoch 5/20
5000/5000 [==============================] - 1057s 211ms/step - loss: 0.1912 - acc: 0.9346 - val_loss: 2.1176 - val_acc: 0.4722
Epoch 6/20
5000/5000 [==============================] - 1103s 221ms/step - loss: 0.1296 - acc: 0.9568 - val_loss: 2.8661 - val_acc: 0.4167
Epoch 7/20
5000/5000 [==============================] - 1182s 236ms/step - loss: 0.0964 - acc: 0.9698 - val_loss: 3.5154 - val_acc: 0.3611
Epoch 8/20
5000/5000 [==============================] - 1245s 249ms/step - loss: 0.0757 - acc: 0.9790 - val_loss: 3.6839 - val_acc: 0.3889
Epoch 9/20
3540/5000 [====================>.........] - ETA: 5:54 - loss: 0.0664 - acc: 0.9819

Ağ yapısı doğrumu büyük veriler için?
Eğitim sonucu acc-val_acc ve loss-val_loss değerle neden bu kadar farklı?
Araştırmalarıma göre ezberleme olabilceğini düşünüyorum. Düzeltmek için aralara dropout serpiştirdim fakat bu sefer acc değeri hiç yükselmedi.
Konuya çok hakim olmadığım için kod içerisinde hatalarım var mı bilmiyorum.

Cevaplarınız için şimdidem çok teşekkür ederim. Kolay Gelsin


#2

Veri setiniz en az 10 bin olsun.Train ve test diye ayırın(ben %70’e %30 diye ayırıyorum). Litaratürde classification için çok iyi sonuç veren modeller mevcut öncelikle onları deneyin. Daha sonra hyperparametleri optimize ederek çoklu eğitime tabi tutun. Yani tek seferde birçok model ile eğitin. En iyi doğruluk değerinin bulunduğu modelin ağırlıklarını kaydedin. Buna benzer basit olarak bir çalışmam var. Onlara bakmak isterseniz linklerini bırakıyorum. Kolay gelsin :slight_smile: https://github.com/gkhan496/multi-train-for-best-accuracy/blob/master/dme_train.py(Bu projede 61.000 oct görüntüsü kullanmıştık) Burada 3 katman için denemiştim. Dilerseniz eğitime bırakın sonuçları bir txt dosyasına kaydediyor ve drive’ınıza gönderebiliyor ve tensorboar’da analizinizi yapabilirsiniz anlayacağınız başlangıç için öğretici bir proje. Kolay gelsin.


#4

Veriniz çok az
Ağ yapınız fazlasıyla Küçük ve yetersiz
Ve asıl Verinizi 64x64 de küçültüp öznitelikleri kaybediyorsunuz
siz bir bakın bakalım 64x64 e küçültülmüş resimden bir şey anlaşılıyormu ?


#5

Cevabınız için çok teşekkür ederim, dediklerinizi düzeltmeye çalışıcam fakat görüntünün boyutlarını 128x128 yaptığım zaman bilgisayarı kullanamaz hale geliyorum, google colab denerim. İlerleme kaydettiğim taktirde sorumu tekrar düzenlerim, kolay gelsin


#6

Hocam sorunuza yardımcı olmayacak ama bu alanda bende ilerlemek istiyorum bahsettiğiniz makaleler nelerdir?
Onların sayesinde mi bu kodu yazacak konuma geldiniz?
Kısacası hikayeniz nedir?


#7

Merhabalar,
Hikayem çok uzun sayılmaz ama kısaca bahsedeyim.
Okulda aldığım ysa, yapay zeka dersleri, görüntü işleme ve ara proje sayesinde python, görüntü işleme ve ağ yapılarına aşinalığım vardı. Makine Öğrenmesi ve derin öğrenme konularında ilerlemek için de şuanki bitirme projemi aldım.

Örnek vermesi açısından bir kaç site verebilirim:

Bunun gibi akademik makalelerden cnn yapılarına bakıyorum:

Şuan keras ile uğraştığım için keras.io sitesine bakabilirsin

burda temel konular var çok güzel anlatılmış:

youtubetan video izliyorum.