1. Genel Bakış
Bu laboratuvarda, Keras sınıflandırıcıyı nasıl oluşturacağınızı öğreneceksiniz. Çiçekleri tanımak için sinir ağı katmanlarının mükemmel kombinasyonunu bulmaya çalışmak yerine, önce güçlü bir önceden eğitilmiş modeli veri kümemize uyarlamak için transfer öğrenme adı verilen bir teknik kullanacağız.
Bu laboratuvar, yapay sinir ağları hakkında gerekli teorik açıklamaları içerir ve derin öğrenme hakkında bilgi edinen geliştiriciler için iyi bir başlangıç noktasıdır.
Bu laboratuvar, "TPU'da Keres" serisinin 2. bölümüdür. Bunları aşağıdaki sırayla veya bağımsız olarak yapabilirsiniz.
- TPU hızında veri ardışık düzenleri: tf.data.Dataset ve TFRecords
- [THIS LAB] Aktarımla öğrenme özellikli ilk Keras modeliniz
- Keras ve TPU'larla kıvrımlı nöral ağlar
- Modern dönş., squeezenet, Xception, Keras ve TPU'lar
Neler öğreneceksiniz?
- Softmax katmanı ve çapraz entropi kaybıyla kendi Keras görüntü sınıflandırıcınızı oluşturmak için
- Hile yapmak için 😈, kendi modellerinizi oluşturmak yerine aktarımla öğrenmeyi kullanın.
Geri bildirim
Bu kod laboratuvarında bir yanlışlık görürseniz lütfen bize bildirin. Geri bildirimlerinizi, GitHub sorunları [feedback link] sayfasında bulabilirsiniz.
2. Google Colaboratory hızlı başlangıç kılavuzu
Bu laboratuvarda Google Collaboratory kullanılır ve herhangi bir kurulum yapmanıza gerek yoktur. Colaboratory, eğitim amaçlı bir online not defteri platformudur. Ücretsiz CPU, GPU ve TPU eğitimi sunar.
Bu örnek not defterini açıp Colaboratory hakkında bilgi edinmek için birkaç hücreyi inceleyebilirsiniz.
TPU arka ucu seçme
Colab menüsünde Çalışma zamanı > Çalışma zamanı türünü değiştir'i ve ardından TPU'yu seçin. Bu kod laboratuvarında, donanım hızlandırmalı eğitim için desteklenen güçlü bir TPU (Tensör İşleme Birimi) kullanacaksınız. Çalışma zamanına bağlantı, ilk çalıştırma sırasında otomatik olarak kurulur veya sağ üst köşedeki "Bağlan" düğmesini kullanabilirsiniz.
Not defteri yürütme
Bir hücreyi tıklayıp Üst Karakter+Enter tuşlarını kullanarak hücreleri tek tek yürütün. Ayrıca, Çalışma zamanı > Tümünü çalıştır seçeneğini kullanarak not defterinin tamamını da çalıştırabilirsiniz.
İçindekiler
Tüm not defterlerinde bir içindekiler listesi bulunur. Soldaki siyah oku kullanarak açabilirsiniz.
Gizli hücreler
Bazı hücrelerde yalnızca başlık gösterilir. Bu, Colab'a özgü bir not defteri özelliğidir. Üzerlerini çift tıklayarak içindeki kodu görebilirsiniz, ancak bu durum genellikle pek de ilgi çekici değildir. Genellikle destek veya görselleştirme işlevleridir. İçerideki işlevlerin tanımlanması için bu hücreleri yine de çalıştırmanız gerekir.
Kimlik Doğrulama
Yetkili bir hesapla kimlik doğrulama yaptığınızda Colab'ın gizli Google Cloud Storage paketlerinize erişmesi mümkündür. Yukarıdaki kod snippet'i bir kimlik doğrulama sürecini tetikler.
3. [INFO] Nöral ağ sınıflandırıcı 101
Özet
Sonraki paragrafta kalın olarak yazılmış terimlerin tümünü biliyorsanız bir sonraki alıştırmaya geçebilirsiniz. Derin öğrenmeye yeni başlıyorsanız hoş geldiniz. Lütfen okumaya devam edin.
Keras, katman dizisi olarak oluşturulan modeller için Sequential API'yi sunar. Örneğin, üç yoğun katman kullanan bir resim sınıflandırıcı Keras'ta şu şekilde yazılabilir:
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=[192, 192, 3]),
tf.keras.layers.Dense(500, activation="relu"),
tf.keras.layers.Dense(50, activation="relu"),
tf.keras.layers.Dense(5, activation='softmax') # classifying into 5 classes
])
# this configures the training of the model. Keras calls it "compiling" the model.
model.compile(
optimizer='adam',
loss= 'categorical_crossentropy',
metrics=['accuracy']) # % of correct answers
# train the model
model.fit(dataset, ... )
Yoğun sinir ağı
Bu, görüntüleri sınıflandırmak için kullanılan en basit nöral ağdır. Katmanlara yerleştirilmiş "nöronlardan" oluşur. Birinci katman giriş verilerini işler ve çıkışlarını diğer katmanlara iletir. Bu katmana "yoğun" denmesinin nedeni, her bir nöronun bir önceki katmandaki tüm nöronlara bağlı olmasıdır.
Bir resmi, tüm piksellerinin RGB değerlerini uzun bir vektörde birleştirerek ve bunu giriş olarak kullanarak böyle bir ağa besleyebilirsiniz. Görüntü tanıma için en iyi teknik olmasa da daha sonra bu özelliği iyileştireceğiz.
Nöronlar, aktivasyonlar, RELU
Bir "nöron", tüm girişlerinin ağırlıklı bir toplamını hesaplar, "önyargı" adı verilen bir değer ekler ve sonucu, "etkinleştirme işlevi" olarak adlandırılan bir yöntemle iletir. Ağırlıklar ve önyargılar başlangıçta bilinmez. Bunlar rastgele başlatılır ve nöral ağ birçok bilinen veri üzerinde eğitilerek "öğrenilir".
En popüler etkinleştirme işlevi, Doğrulanmış Doğrusal Birim için RELU olarak adlandırılır. Yukarıdaki grafikte de görebileceğiniz gibi bu çok basit bir işlevdir.
Softmax etkinleştirme
Çiçekleri 5 kategoriye (gül, lale, karahindiba, papatya, ayçiçeği) ayırdığımız için yukarıdaki ağ 5 nöron katmanıyla sona eriyor. Ara katmanlardaki nöronlar, klasik RELU etkinleştirme işlevi kullanılarak etkinleştirilir. Ancak son katmanda, bu çiçeğin gül, lale vb. olma olasılığını temsil eden 0 ile 1 arasında sayılar hesaplamak istiyoruz. Bunun için "softmax" adlı bir etkinleştirme işlevi kullanacağız.
Bir vektöre softmax uygulamak için her bir öğenin üstel değeri alınır ve ardından vektör normalleştirilir. Bu işlem genellikle L1 normu (mutlak değerlerin toplamı) kullanılarak yapılır. Böylece, değerler 1'e ulaşır ve olasılık olarak yorumlanabilir.
Kreuz entropi kaybı
Sinir ağımız artık giriş görüntülerinden tahminler ürettiğine göre, bunların ne kadar iyi olduğunu, yani ağın bize bildirdiği bilgilerle doğru yanıtlar arasındaki mesafeyi (genellikle "etiketler" olarak adlandırılır) ölçmemiz gerekir. Veri kümesindeki tüm resimler için doğru etiketlere sahip olduğumuzu unutmayın.
Herhangi bir mesafe işe yarar, ancak sınıflandırma sorunları için "entropiler arası mesafe" en etkilidir. Buna hata veya "kayıp" işlevimiz diyeceğiz:
Gradyan inişi
Sinir ağını "eğitmek", çapraz entropi kayıp işlevini en aza indirmek için ağırlıkları ve önyargıları ayarlamak amacıyla eğitim resimlerini ve etiketlerini kullanmak anlamına gelir. İşleyiş şekline bakalım.
Çapraz entropi, eğitim resminin ağırlıkları, önyargıları, pikselleri ve bilinen sınıfının bir işlevidir.
Tüm ağırlıklara ve tüm sapmalara göre çapraz entropinin kısmi türevlerini hesaplarsak, belirli bir görüntü, etiket ve ağırlıkların ve yanlılığın mevcut değeri için hesaplanan bir "gradyan" elde ederiz. Milyonlarca ağırlığa ve sapmaya sahip olabileceğimizi, bu nedenle gradyanı hesaplamanın çok fazla iş yükü olacağını unutmayın. Neyse ki Tensorflow bunu bizim için yapıyor. Gradyanların matematiksel özelliği "yukarı" işaret etmeleridir. Çapraz entropinin düşük olduğu yere gitmek istediğimizden ters yönde ilerliyoruz. Ağırlıkları ve sapmaları gradyanın bir kısmına göre güncelleriz. Daha sonra, bir eğitim döngüsünde sonraki eğitim görüntüsü ve etiketi gruplarını kullanarak aynı şeyi tekrar tekrar yaparız. Bunun, çapraz entropinin minimum düzeyde olduğu bir yere yaklaşacağını umuyoruz, ancak bu minimum değerin benzersiz olduğunu hiçbir şey garanti etmemektedir.
Mini toplanma ve ivme
Gradyanınızı yalnızca bir örnek resimde hesaplayabilir ve ağırlıkları ile önyargıları hemen güncelleyebilirsiniz. Ancak bunu 128 resimlik bir grupta yaptığınızda, farklı örnek resimlerin getirdiği kısıtlamaları daha iyi temsil eden bir gradyan elde edersiniz. Bu nedenle, çözüme daha hızlı yaklaşma olasılığı daha yüksektir. Mini grubun boyutu ayarlanabilir bir parametredir.
Bazen "stokastik gradyan azalma" olarak da adlandırılan bu tekniğin daha pratik bir avantajı vardır: Gruplarla çalışmak, daha büyük matrislerle çalışmak anlamına da gelir ve bu matrislerin GPU'larda ve TPU'larda optimizasyonu genellikle daha kolaydır.
Yine de yakınsama biraz karmaşık olabilir ve gradyan vektörü tamamen sıfır ise durabilir. Bu, minimum değeri bulduğumuz anlamına mı geliyor? Her zaman değil Bir renk geçişi bileşeni, minimum veya maksimum değerde sıfır olabilir. Milyonlarca öğe içeren bir gradyan vektöründe, bunların tümü sıfır ise her sıfırın minimuma ve hiçbirinin maksimum noktaya karşılık gelme olasılığı oldukça düşüktür. Çok boyutlu bir alanda eyer noktaları oldukça yaygındır ve bunlarda durmak istemeyiz.
Görsel: eyer noktası. Gradyan 0'dır ancak tüm yönlerde minimum değildir. (Resim ilişkilendirmesi Wikimedia: By Nicoguaro - Own work, CC BY 3.0)
Çözüm, optimizasyon algoritmasına biraz momentum eklemektir. Böylece algoritma, durma noktasını geçerken sorun yaşamaz.
Sözlük
toplu veya mini toplu: Eğitim, her zaman eğitim verisi ve etiket grupları üzerinde gerçekleştirilir. Bu, algoritmanın yakınlaşmasına yardımcı olur. "Toplu" boyutu, genellikle veri tenörlerinin ilk boyutudur. Örneğin, [100, 192, 192, 3] şeklindeki bir tensör, piksel başına üç değer (RGB) içeren 192x192 piksel boyutunda 100 resim içerir.
Çapraz entropi kaybı: Sınıflandırıcılarda sıklıkla kullanılan özel bir kayıp işlevidir.
Yoğun katman: Her nöronun önceki katmandaki tüm nöronlara bağlı olduğu bir nöron katmanı.
özellikler: Bir nöral ağın girişlerine bazen "özellikler" denir. İyi tahminler elde etmek için bir veri kümesinin hangi bölümlerinin (veya bölüm kombinasyonlarının) bir yapay zeka ağına besleneceğini belirleme sanatına "özellik mühendisliği" denir.
labels: Gözetimli sınıflandırma problemindeki "sınıflar" veya doğru yanıtlar için kullanılan başka bir ad
Öğrenme hızı: Ağırlıkların ve önyargıların eğitim döngüsünün her iterasyonunda güncellendiği gradyanın kesri.
logits: Aktivasyon işlevi uygulanmadan önce bir nöron katmanının çıktılarına "logit" adı verilir. Bu terim, eskiden en popüler aktivasyon işlevi olan "mantıksal işlev" (diğer adıyla "sigmoid işlevi") teriminden gelir. "Mantıksal işlevden önceki nöron çıkışları" ifadesi "mantıksallar" olarak kısaltıldı.
loss: nöral ağ çıkışlarını doğru yanıtlarla karşılaştıran hata işlevi
nöron: Girişlerinin ağırlıklı toplamını hesaplar, bir ağırlık ekler ve sonucu bir aktivasyon işlevi aracılığıyla iletir.
tek sıcak kodlama: 5 üzerinden 3. sınıf, 5 öğeden oluşan bir vektör olarak kodlanır. 3'üncü olan (1) hariç tüm sıfırlar kullanılır.
relu: Düzeltilmiş doğrusal birim. Nöronlar için popüler bir aktivasyon işlevidir.
sigmoid: Eskiden popüler olan ve özel durumlarda hâlâ faydalı olan başka bir etkinleştirme işlevidir.
softmax: Bir vektör üzerinde işlem yapan, en büyük bileşen ile diğer tüm bileşenler arasındaki farkı artıran ve ayrıca olasılık vektörü olarak yorumlanabilmesi için vektörün toplamını 1 olacak şekilde normalleştiren özel bir etkinleştirme işlevidir. Sınıflandırıcılarda son adım olarak kullanılır.
tensör: "Tensör", matris gibidir ancak isteğe bağlı sayıda boyuta sahiptir. 1 boyutlu bir tensör bir vektördür. 2 boyutlu bir tensör bir matristir. 3, 4, 5 veya daha fazla boyutlu tensörleriniz de olabilir.
4. Transfer Öğrenimi
Görüntü sınıflandırma sorunları için yoğun katmanlar muhtemelen yeterli olmayacaktır. Evrimsel katmanlar ve bunları çeşitli şekillerde düzenlemenin yolları hakkında bilgi edinmemiz gerekiyor.
Ancak kısa yoldan da gidebiliriz. İndirebileceğiniz tam eğitimli konvolüsyonlu nöral ağlar mevcuttur. Bunların son katmanı olan softmax sınıflandırma başlığını kesip kendi katmanınızla değiştirebilirsiniz. Eğitilen tüm ağırlıklar ve ağırlıklar olduğu gibi kalır, yalnızca eklediğiniz softmax katmanını yeniden eğitirsiniz. Bu tekniğe transfer öğrenimi denir ve sinir ağının önceden eğitildiği veri kümesi sizinkine "yeterince yakın" olduğu sürece şaşırtıcı bir şekilde işe yarar.
Uygulamalı
Lütfen aşağıdaki not defterini açın, hücreleri yürütün (Üst Karakter-ENTER) ve "İŞ GEREKLİ" etiketini gördüğünüz her yerde talimatları uygulayın.
Keras Flowers transfer learning (playground).ipynb
Ek bilgiler
Transfer öğrenimi sayesinde hem en iyi araştırmacılar tarafından geliştirilen gelişmiş konvolüsyonel nöral ağ mimarilerinden hem de büyük bir görüntü veri kümesinde ön eğitimden yararlanabilirsiniz. Bu örnekte, çok sayıda bitki ve dış mekan sahneleri içeren, çiçeklere yeterince yakın olan bir görüntü veritabanı olan ImageNet'te eğitimli bir ağdan bilgi aktaracağız.
Görsel: Daha önce eğitilmiş karmaşık bir konvolüsyonel sinir ağını siyah kutu olarak kullanarak yalnızca sınıflandırma başlığını yeniden eğitme. Bu, aktarım öğrenmedir. Konvolüsyonel katmanlardan oluşan bu karmaşık düzenlemelerin nasıl işlediğini daha sonra göreceğiz. Şu an için bu başka birisiyle ilgili.
Keras'ta transfer öğrenme
Keras'ta, tf.keras.applications.*
koleksiyonundan önceden eğitilmiş bir model oluşturabilirsiniz. Örneğin MobileNet V2, makul boyutta kalan çok iyi bir kıvrımlı mimaridir. include_top=False
öğesini seçtiğinizde, son softmax katmanı olmadan önceden eğitilmiş modeli elde edersiniz. Böylece kendi modelinizi ekleyebilirsiniz:
pretrained_model = tf.keras.applications.MobileNetV2(input_shape=[*IMAGE_SIZE, 3], include_top=False)
pretrained_model.trainable = False
model = tf.keras.Sequential([
pretrained_model,
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(5, activation='softmax')
])
pretrained_model.trainable = False
ayarına da dikkat edin. Önceden eğitilmiş modelin ağırlıklarını ve önyargılarını dondurur. Böylece yalnızca softmax katmanınızı eğitirsiniz. Bu işlem genellikle nispeten az ağırlık içerir ve çok büyük bir veri kümesi gerektirmeden hızlı bir şekilde yapılabilir. Ancak çok fazla veriniz varsa transfer öğrenme, pretrained_model.trainable = True
ile daha da iyi sonuç verebilir. Daha sonra, önceden eğitilmiş ağırlıklar mükemmel başlangıç değerleri sağlar ve sorununuza daha iyi uyacak şekilde eğitim tarafından ayarlanabilir.
Son olarak, yoğun softmax katmanınızın önüne Flatten()
katmanının eklendiğine dikkat edin. Yoğun katmanlar düz veri vektörleriyle çalışır ancak önceden eğitilmiş modelin döndürdüğü şeyin bu olup olmadığını bilmiyoruz. Bu nedenle düzeltmemiz gerekiyor. Bir sonraki bölümde kıvrımlı mimarileri ele alırken kıvrımlı katmanların döndürdüğü veri biçimini açıklayacağız.
Bu yaklaşımla %75'e yakın doğruluk elde edebilirsiniz.
Çözüm
Çözüm not defterini burada bulabilirsiniz. Takılırsanız kullanabilirsiniz.
Keras Flowers transfer learning (solution).ipynb
Ele aldığımız konular
- 🤔 Keras'ta sınıflandırıcı yazma
- 🤓, softmax son katmanı ve çapraz entropi kaybıyla yapılandırılmış
- 😈 Transfer öğrenme
- 🤔 İlk modelinizi eğitme
- 🧐 Eğitim sırasında veri kaybını ve doğruluğu takip etme
Lütfen bu kontrol listesini gözden geçirin.
5. Tebrikler!
Artık Keras modeli oluşturabilirsiniz. Devrimsel katmanların nasıl oluşturulacağını öğrenmek için lütfen bir sonraki laboratuvara geçin.
- TPU hızında veri ardışık düzenleri: tf.data.Dataset ve TFRecords
- [THIS LAB] Aktarımla öğrenme özellikli ilk Keras modeliniz
- Keras ve TPU'larla kıvrımlı nöral ağlar
- Keras ve TPU'lar ile modern convnet'ler, squeezenet, Xception
Uygulamada TPU'lar
TPU'lar ve GPU'lar Cloud AI Platform'da kullanılabilir:
- Derin Öğrenme Sanal Makinelerinde
- AI Platform Notebooks'ta
- AI Platform Training alanındaki iş ilanları
Son olarak, geri bildirimlere değer veriyoruz. Bu laboratuvarda bir eksiklik görürseniz veya bir şeylerin iyileştirilmesi gerektiğini düşünüyorsanız lütfen bize bildirin. Geri bildirim, GitHub sorunları [geri bildirim bağlantısı] üzerinden gönderilebilir.
|