Keras ile Inception V3 Kullanımı ve Öğrenim Transferi
Makine öğrenmesi araştırmacıları paylaşmayı genel olarak severler. Bir nöral ağı inşa etmek ve eğitmek için günler, hatta haftalarca zaman harcayabilirler. Çoğunlukla da GPU ve paralel sistemler gibi yüksek maliyetli donanım kullanmaları da gerekmektedir. Nöral ağın inşa ediliş şekli ve son ağırlıklarına sahipseniz aynı sonuçları mili saniyeler içerisinde üretebilirsiniz. Bu şekilde öğrenme çıktıları partiler arasında aktarılmış olur. Tıpkı Matrix’te Neo’nun kung fu öğrenişi gibi.
Resim Tanıma
Satranç kazanan bir yapay zeka sistemi geliştirilmesi yapay zeka çalışmaları için en merak uyandıran konu olduğu düşünülürdü. Daha sonra görüntü bazlı çalışmaların daha büyük meydan okumalar oldukları anlaşıldı.
Eski yıllarda resim tanıma işlemi için sıklıkla geleneksel bilgisayarla görü algoritmaları kullanılırdı. Aşağıdaki görsel 1.2 milyon resme ait 1000 farklı kategorinin tespit edilmeye çalışıldığı ImageNet yarışmasının kazanan modellerinin yıllar içerisinde elde ettiği hata oranlarını göstermektedir.
Görüldüğü üzere geleneksel bilgisayarla görü algoritmalarının uygulandığı dönemlerde %30’luk hata oranlarında sıkışıp kalmış durumdaydık. Resim tanıma çalışmalarına derin öğrenmenin uygulanması tarihin akışını değiştirdi. AlexNet ile 2012 yılında hata oranı bir anda 15%’lere düşüvermişti.
ImageNet Kazanan Modelleri
AlexNet tarihin akışını değiştirmişti ama bugün için bunun çok daha ötesine gidilmiş durumda. Inception V3 modeli 2014 yılında hata oranını %3’lere kadar düşürdü. Bu imagenet galibi algoritmalar ise Keras dolayısıyla da TensorFlow tarafından desteklenir durumda. Bir kaç satır kod ile bu modellerin öğrenme çıktılarından faydalanabilmekteyiz.
Inception V3
Inception V3 bir tür konvolüsyonel nöral ağ modeli. Çok sayıda konvolüsyon ve maksimum havuzlama adımlarından oluşmakta. Son aşamada ise tam bağlı nöral ağ içeriyor. Tabi ki bu yapıyı ezbere bilmenize gerek yok. Keras bizim yerimize bu yapı ile başa çıkacaktır.
Öncelikle Inception V3 modelini aşağıdaki şekilde referans gösteriyoruz.
1 2 3 4 5 6 7 |
from keras.applications.inception_v3 import InceptionV3 from keras.applications.inception_v3 import preprocess_input from keras.applications.inception_v3 import decode_predictions |
Ayrıca aşağıdaki kütüphaneleri kullanarak bazı ön işleme işlemlerini gerçekleştireceğiz.
1 2 3 4 5 6 7 |
from keras.preprocessing import image import numpy as np import matplotlib.pyplot as plt |
Inception V3 modelinin inşası oldukça kolay. Model inşa komutu ilk çalıştığında model otomatik olarak indirilecek. Ağırlık parametresinin imagenet olarak atanması imagenet yarışmasını kazanan modele ait ağırlıkların kullanılmasını sağlayacak. Inception ağ yapısını kullanarak biz bir şey eğitmek istiyorsak ağırlık parametresi None olarak atanabilir, bu şekilde ağırlıklar rassal ön değerler ile oluşturulacaktır.
1 2 3 4 5 |
model = InceptionV3(weights='imagenet', include_top=True) |
Model bir kere yüklendikten sonra önceden inşa edilmiş ağ yapısını ve son durumdaki ağırlıkları aşağıdaki şekilde gözlemleyebiliriz.
1 2 3 4 5 6 |
print("model structure: ", model.summary()) print("model weights: ", model.get_weights()) |
Imagenet için önceden dizayn edilmiş ağ yapısına ve nihai ağırlıklara sahibiz. Artık Inception’a istediğimiz şeyi sorabiliriz. Ben bir klasöre bir düzine kedi ve köpek resmi koyarak sırasıyla modele bunları bilmesini istedim. Bu arada aşağıdaki resimleri Google’dan rastgele seçtim.
Her resme ait en olası 3 sonucu modelden bilmesini isteyeceğiz. Sonrasında resim ve tahmini birlikte göstereceğiz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
for i in range(1, 17): img_path = 'testset/%s.jpg' % (i) img = image.load_img(img_path, target_size=(299, 299)) x = image.img_to_array(img) x = np.expand_dims(x, axis = 0) x = preprocess_input(x) features = model.predict(x) print(decode_predictions(features, top = 3)) plt.imshow(image.load_img(img_path)) plt.show() |
Inception V3 için yaptığımız testler sonucunda üretilen değerler oldukça tatmin edici görünüyor. Gözlemlediğim kadarıyla inception v3 hayvan türlerini (kedi mi köpek mi) sınıflandırmakta oldukça başarılı. Fakat cinslerin tespiti konusunda yanılabiliyor. Örneğin british shorthair cinsi bir kediyi sorduğunuz zaman iran kedisi yanıtını alıyorsunuz.
Özetle, imagenet galibi Inception V3 modelinin öğrenme çıktılarından faydalanarak resimleri kedi mi köpek mi şeklinde sınıflandırabildik. Saf model 1.2 milyon resim ile eğitilmiş olsa da saniyeler içerisinde aynı yapıyı kullanabildik. Ve bunu yaparken herhangibir SDK veya servis tüketimi yapmadık. Tek kullandığımız inception modelinin dizayn şekli ve ağırlıkları idi. Prof. Andrew’in de belirttiği gibi öğrenim transferi, makine öğrenmesinin başarısında bir sonraki sürücü olacak.
Bu yazı Transfer Learning in Keras Using Inception V3 yazısından Türkçe’ye çevrilmiştir.