TensorFlow, Keras ve derin öğrenme, doktora gerektirmeyen

Bu codelab'de, elle yazılmış sayıları tanıyan bir nöral ağ oluşturmayı ve eğitmeyi öğreneceksiniz. Bu süreçte, nöral ağınızı% 99 doğruluk oranına ulaşacak şekilde geliştirirken, derin öğrenme uzmanlarının modellerini verimli bir şekilde eğitmek için kullandığı ticaret araçlarını da keşfedeceksiniz.

Bu codelab'de, MNIST veri kümesi kullanılmaktadır. Bu veri kümesi,nesilleri neredeyse yirmi yıldır akıbetini önleyen 60.000 basamaklı sayıdır. Sorunu 100'den az Python / TensorFlow kodu ile çözeceksiniz.

Neler öğreneceksiniz?

  • Nöral ağ nedir ve nasıl eğitilir?
  • tf.keras'ı kullanarak 1 katmanlı temel bir nöral ağ oluşturma
  • Daha fazla katman ekleme
  • Öğrenim oranı planı oluşturma
  • Evrişimli nöral ağlar oluşturma
  • Normalleştirme teknikleri nasıl kullanılır: ayrılma, toplu normalleştirme
  • Neleri aşırı oluşturuyor?

Gerekenler

Sadece bir tarayıcı. Bu atölye tamamen Google Colaboratory ile yapılabilir.

Geri bildirim

Bu laboratuvarda yanlış bir şey görürseniz veya geliştirilmesi gerektiğini düşünüyorsanız lütfen bize bildirin. Geri bildirimleri GitHub'ın sorunları [feedback link] üzerinden ele alırız.

Bu laboratuvarda Google Colaboratory kullanılıyor ve kurulum yapmanız gerekmiyor. Chromebook'tan çalıştırabilirsiniz. Lütfen aşağıdaki dosyayı açın ve Colab not defterleri hakkında bilgi edinmek için hücreleri çalıştırın.

Welcome to Colab.ipynb

Aşağıda ek talimatlar verilmiştir:

GPU arka ucu seçme

Colab menüsünde, Çalışma zamanı > Çalışma zamanı türünü değiştir'i, ardından GPU'yu seçin. Çalışma zamanında bağlantı ilk çalıştırmada otomatik olarak gerçekleşir veya sağ üst köşedeki "Bağlan" düğmesini kullanabilirsiniz.

Not defteri yürütme

Bir hücreyi tıklayıp Shift-ENTER tuşlarını kullanarak hücreleri teker teker çalıştırın. Ayrıca, not defterinin tamamını Çalışma zamanı > Tümünü çalıştır ile çalıştırabilirsiniz

İçindekiler

Tüm not defterlerinde bir içindekiler tablosu vardır. Soldaki siyah oku kullanarak açabilirsiniz.

Gizli hücreler

Bazı hücrelerde yalnızca başlık gösterilir. Bu Colab'a özel bir not defteri özelliğidir. İçindeki kodu tıklayarak çift tıklayabilirsiniz, ancak genellikle çok ilgi çekici olmaz. Genellikle destek veya görselleştirme işlevleri. İçindeki işlevlerin tanımlanması için bu hücreleri yine de çalıştırmanız gerekir.

Öncelikle bir nöral ağ treni izleyeceğiz. Lütfen aşağıdaki not defterini açın ve tüm hücrelerde gezinin. Koda henüz dikkat etmeyin. Daha sonra kod açıklamasına başlayacağız.

keras_01_mnist.ipynb

Not defterini yürütürken görselleştirmelere odaklanın. Açıklamalar için aşağıya bakın.

Eğitim verileri

Her resmin neyi temsil ettiğini bilmemiz için (yani 0 ile 9 arasında bir sayı) etiketlenmiş el yazısı rakamlardan oluşan bir veri kümeniz var. Not defterinde bir alıntı göreceksiniz:

Oluşturacağımız nöral ağ, 10 sınıfındaki el yazısı rakamlarını sınıflandırır (0, .., 9). Bunu, sınıflandırmanın düzgün çalışması için doğru değere sahip olması gereken dahili parametrelere göre yapar. Bu "doğru değer", resimler ve ilişkili doğru cevaplar içeren "etiketli bir veri kümesi" gerektiren bir eğitim işlemi aracılığıyla öğrenilir.

Eğitilen nöral ağın iyi performans gösterip göstermediğini nasıl anlayabiliriz? Ağı test etmek için eğitim veri kümesini kullanmak işe yarar. Bu veri kümesini eğitim sırasında birden çok kez görmüş ve büyük olasılıkla bu veri kümesinde çok başarılı olmuştur. Ağın "gerçek dünya" performansını değerlendirmek için eğitim sırasında hiç görülmemiş, etiketlenmiş başka bir veri kümesine ihtiyacımız var. Bu, "doğrulama veri kümesi" olarak adlandırılır.

Eğitim

Eğitim ilerledikçe tek seferde bir grup veri, dahili model parametreleri güncellenir ve model, elle yazılmış rakamları tanıma konusunda daha iyi hale gelir. Bunu eğitim grafiğinde görebilirsiniz:

Sağ tarafta "doğruluk", doğru tanınan sayıların yüzdesidir. Eğitim ilerledikçe bu oranda bir artış yaşanmaz.

Sol tarafta "kayıp" görülebilir. Eğitimi desteklemek için sistemin basamakları ne kadar kötü tanıdığını temsil eden bir "kesinlik" işlevi tanımlarız ve bunu en aza indirmeye çalışırız. Burada, eğitim kaybı ilerledikçe kaybın hem eğitim hem de doğrulama verilerinde düştüğünü görürsünüz: Bu iyidir. Nöral ağın öğrenme aşamasında olduğu anlamına gelir.

X ekseni, veri kümesinin tamamında "sıfır zaman" veya yineleme sayısını gösterir.

Tahminler

Eğitilen eğitim modeli, elle yazılmış rakamları tanımak için kullanılabilir. Sonraki görselleştirme,yerel yazı tiplerinden (ilk satır) oluşturulan birkaç hane ve ardından doğrulama veri kümesinin 10.000 basamağındaki performansı gösterir. Tahmini sınıf, her basamağın altında kırmızı renkte, yanlışsa görünür.

Gördüğünüz gibi, bu ilk model çok iyi değildir, ancak bazı basamakları doğru şekilde tanır. Son doğrulama doğruluğu% 90 civarındadır. Bu, başladığımız basit model için hiç de kötü değildir,ancak yine de 10.000 üzerinden 1.000 doğrulama basamağını kaçırdığı anlamına gelir. Gösterilebilecek çok daha fazla bilgi olduğundan, tüm yanıtların yanlış (kırmızı) olduğu görülüyor.

Tensörler

Veriler matriste depolanır. 28x28 piksel gri tonlamalı resim 28x28 iki boyutlu bir matrise sığmaktadır. Ancak renkli resimler için daha fazla boyuta ihtiyacımız var. Piksel başına 3 renk değeri (Kırmızı, Yeşil, Mavi) olduğundan [28, 28, 3] boyutlarıyla üç boyutlu bir tablo gerekir. 128 renkli resim grubunu depolamak için [128, 28, 28, 3] boyutlarla dört boyutlu bir tablo gerekir.

Bu çok boyutlu tablolar, "tensors" olarak adlandırılır. Bu boyutların listesi "şekli"dir.

Özetle

Bir sonraki paragrafta kalın harflerle yazılmış tüm terimleri zaten biliyorsanız bir sonraki egzersize geçebilirsiniz. Derin öğrenmeye yeni başlıyorsanız hoş geldiniz. Lütfen okumaya devam edin.

cadı.png

Katman sırası halinde oluşturulmuş modeller için Keras, sıralı API'yi sunuyor. Ö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=[28, 28, 1]),
    tf.keras.layers.Dense(200, activation="relu"),
    tf.keras.layers.Dense(60, activation="relu"),
    tf.keras.layers.Dense(10, activation='softmax') # classifying into 10 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, ... )

Tek bir yoğun katman

MNIST veri kümesindeki el yazısı rakamlar 28x28 piksel gri tonlamalı resimlerdir. Bunları sınıflandırmak için en basit yaklaşım, 1 katmanlı nöral ağ için giriş olarak 28x28=784 piksel kullanılmasıdır.

Ekran Görüntüsü, 26.07.2016 12.32.24.png

Bir nöral ağdaki her nöron, tüm girişlerinin ağırlıklı bir toplamını alır, "ön yargı" adlı bir sabit değer ekler ve ardından sonucu, doğrusal olmayan bir "etkinleştirme işlevi" aracılığıyla besler. "ağırlık" ve &brt;ön yargılar" eğitim ile belirlenecek parametrelerdir. Başlangıçta rastgele değerlerle başlatılırlar.

Yukarıdaki resimde, basamakları 10 sınıfa (0-9) sınıflandırmak istediğimiz için 10 çıkış nöronlu 1 katmanlı bir nöral ağ gösterilmektedir.

Bir matris çarpanıyla

Bir nöral ağ katmanının, görüntü koleksiyonunu işleyen bir matris çarpanıyla nasıl gösterilebileceği aşağıda gösterilmiştir:

matmul.gif

Ağırlık matrisi olarak ağırlıkların ilk sütununu kullanarak, ilk görselin tüm piksellerinin ağırlıklı toplamını hesaplarız. Bu toplam, ilk nörona karşılık gelir. İkinci ağırlık sütununu kullanarak ikinci nöron için de aynısını yaparız ve bu, 10. nörona kadar devam eder. Ardından, kalan 99 resim için işlemi tekrarlayabiliriz. X'i 100 resmimizi içeren matris olarak adlandırdığımızda, 100 nöronuz için hesaplanan tüm ağırlıklı toplamlar, X.W'nin matris çarpımıdır.

Her nöron artık sabit bir değer (sabit) eklemelidir. 10 nöronumuz olduğundan 10 nöron sabitimiz vardır. 10 değer b'den oluşan bu vektörü çağırırız. Daha önce hesaplanan matrisin her satırına eklenmelidir. "Yayın" adlı sihirli bir dokunuş kullanarak bunu basit bir artı işaretiyle yazacağız.

Son olarak, “softsoft&‘; (aşağıda açıklanmıştır) gibi bir etkinleştirme işlevi uygular ve 100 resme uygulanan 1 katmanlı bir nöral ağı açıklayan formülü alırız:

Ekran Görüntüsü, 26.07.2016 16.02.36.png

Krasra'da

Keras gibi üst düzey nöral ağ kitaplıkları için bu formülü uygulamamız gerekmez. Ancak bir nöral ağ katmanının yalnızca bir dizi çarpma ve ekleme olduğunu anlamak önemlidir. Keras'ta, yoğun katman şu şekilde yazılır:

tf.keras.layers.Dense(10, activation='softmax')

Ayrıntılı bilgi

Zincir nöral ağ katmanları için önemsizdir. İlk katman, piksellerin ağırlıklı toplamlarını hesaplar. Sonraki katmanlar, önceki katmanların çıkışlarının ağırlıklı toplamlarını hesaplar.

Nöron sayısından farklı, tek fark etkinleştirme işlevinin seçimidir.

Etkinleştirme işlevleri: relu, softmax ve sigmoid

Genellikle "relu&quot" etkinleştirme işlevini kullanırsınız. Bir sınıflandırıcıdaki son katman, "softmax" etkinleştirmesini kullanır.

Yine de, "nöron"un tüm girişlerinin ağırlıklı toplamı hesaplanır, "ön yargı" adı verilen bir değer eklenir ve sonuç olarak etkinleştirme işlevi beslenir.

En popüler etkinleştirme işlevine, Düzeltilmiş Doğrusal Birim için "RELU" denir. Yukarıdaki grafikte görebileceğiniz gibi bu çok basit bir işlevdir.

Nöral ağlardaki geleneksel etkinleştirme işlevi "sigmoid"dir ancak "relure" neredeyse her yerde daha iyi birleştirici özelliklere sahip olduğu görülmüştür ve artık tercih edilen yöntemdir.

Sınıflandırma için softmax etkinleştirme

Nöral ağımızın son katmanında 10 nöron bulunur. Bunun nedeni, el yazısı haneleri 10 sınıfa (0,..9) ayırmaktır. 0 ile 1 arasında, bu basamağın 0, 1, 2 gibi bir sayı olma olasılığını temsil eden 10 sayı vermelidir. Bunun için son katmanda "softmax" adlı bir etkinleştirme işlevi kullanacağız.

Bir vektöre softmax uygulamak, her bir öğenin üstelini alıp ardından vektörü normalleştirerek, genellikle normalleştirilmiş değerlerin 1'e eşit olacak ve olasılık olarak yorumlanabilecek olmasını sağlamak için (L1âr) toplamına (yani mutlak değerlerin toplamı) böler.

Etkinleştirmeden önceki son katmanın çıkışına bazen "logits" denir. Bu vektör L = [L0, L1, L2, L3, L4, L5, L6, L7, L8, L9] ise:

Entropi kaybı

Nöral ağımız artık giriş resimlerinden tahminler oluşturduğuna göre, bunların ne kadar iyi olduklarını, yani ağın bizimle paylaştıkları arasında doğru olan ve genellikle "etiketler" olarak adlandırılan doğru yanıtlar arasındaki mesafeyi ölçmemiz gerekir. Veri kümesindeki tüm resimler için doğru etiketlerimiz olduğunu unutmayın.

Her tür mesafe işe yarar, ancak sınıflandırma sorunlarında "çapraz entropi mesafesi" en etkili yöntemdir. Bu yönteme hatamız veya kayıp işlevi adını veririz:

Gradyan iniş

Nöral ağ, aslında çapraz entropi kayıp işlevini en aza indirmek için ağırlıkları ve ön yargıları ayarlamak için eğitim resimleri ve etiketlerin kullanılması anlamına gelir. İşleyiş şekli aşağıda açıklanmıştır.

Çapraz entropi; ağırlık, ağırlıklar, eğitim resminin pikselleri ve bilinen sınıfının bir işlevidir.

Tüm ağırlıklara ve çaprazlamalara göre göreceli olarak entropinin kısmi türevlerini hesaplarsak belirli bir resmin, etiketin ve ağırlıkların ve ön yargıların mevcut değeri için hesaplanan bir "gradyan" elde ederiz. Milyonlarca ağırlığımız ve önyargımız olabileceğini unutmayın. Bu nedenle, gradyan hesaplamanın çok iş çıkarması gerekir. Neyse ki TensorFlow bunu bizim için yapıyor. Renk geçişinin matematiksel özelliği, "yukarı" işaretini göstermesidir. Çapraz entropinin düşük olduğu yere gitmek istediğimiz için ters yönde yol alıyoruz. Ağırlıkları ve sapmaları gradyanın bir kısmıyla güncelleriz. Daha sonra aynı şeyi bir sonraki eğitim resmi ve etiketi grubu ile eğitim döngüsünde tekrar tekrar yapıyoruz. Umarız bu bilgi de çapraz çapraz bağlantının minimum düzeyde olduğu bir yere dönüşecektir. Ancak bu minimum şartların benzersiz olduğunu garanti etmez.

gradyan ins2.png

Küçük vuruş ve ivme

Gradyanınızı yalnızca tek bir örnek resimde hesaplayabilir ve ağırlıklar ile sapmaları hemen güncelleyebilirsiniz. Örneğin, 128 resimden oluşan bir grupta bu işlem, farklı örnek resimler tarafından uygulanan kısıtlamaları daha iyi temsil eden bir gradyan verir ve dolayısıyla çözüme daha hızlı yaklaşabilir. Mini grubun boyutu ayarlanabilir bir parametredir.

Bazen "Olasılıksal gradyan iniş" adı verilen bu teknikin başka bir pragmatik avantajı da vardır: Toplu çalışma, daha büyük matrislerle çalışmak anlamına gelir ve genellikle GPU'larda ve TPU'larda bu şekilde optimizasyon daha kolaydır.

Yine de yakınlaşma biraz kaotik olabilir ve gradyan vektörünün tamamı sıfırsa bile durabilir. Bu, minimum gösterim sayısına ulaştığımız anlamına mı geliyor? Her zaman değil Gradyan bileşeni minimum veya maksimum değerde sıfır olabilir. Milyonlarca öğe içeren bir gradyan vektörüyle, bunların tümü sıfırsa, her sıfırın bir minimum değere karşılık gelmesi ve hiçbirinin maksimum noktaya ulaşmama olasılığı oldukça küçüktür. Birçok boyutun bulunduğu bir ortamda, eyer noktaları oldukça yaygındır ve bunları durdurmak istemeyiz.

Çizim: Eyer noktası. Gradyan 0'dır ancak tüm yönlerde minimum değer değildir. (Resim ilişkilendirmesi Wikimedia: Nicoguaro Tarafından - Kendi çalışma, CC BY 3.0)

Bunun çözümü, optimizasyon algoritmasına biraz ivme kazandırmaktır. Böylece, sele noktalarından hiç durmadan yelken yapabilirler.

Sözlük

toplu veya mini toplu: Eğitim, her zaman eğitim verisi ve etiket grupları üzerinde gerçekleştirilir. Bu, algoritmanın birleşmesine yardımcı olur. "Toplu" boyut, genellikle veri tensörlerinin ilk boyutudur. Örneğin, şekil bir tensör [100, 192, 192, 3], piksel başına üç değer (RGB) içeren 192x192 piksellik 100 resim içerir.

tropikler arası kayıp: Genellikle sınıflandırıcılarda kullanılan özel bir kayıp işlevi.

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şleri bazen "özellikler" olarak adlandırılır. İyi tahminler almak için bir veri kümesinin hangi parçalarının (veya parça kombinasyonlarının) nöral ağa besleneceğini tanımlama sanatına "özellik mühendisliği" denir.

labels: "sınıflar" için başka bir ad veya gözetim altındaki bir sınıflandırma sorununda doğru yanıtlar

öğrenme oranı: Eğitim döngüsünün her yinelemesinde ağırlıkların ve önyargıların güncellendiği gradyan oranı.

logits: Etkinleştirme işlevi uygulanmadan önce nöron katmanının çıkışına "logits" denir. Bu terim, eskiden en popüler etkinleştirme işlevi olan "sigmoid" adıyla da bilinir. "Nöron çıktıları", lojistik işlevinden önce kısaltılır ve "lojistik" olarak kısaltılır.

loss: Nöral ağ çıkışlarını doğru cevaplarla karşılaştıran hata işlevi

nöron: Girişlerinin ağırlıklı toplamını hesaplar, bir eğilim ekler ve sonucu bir etkinleştirme işleviyle besler.

tek seferlik kodlama: 5 sınıftan 3. sınıf, 5'in yer aldığı bir vektör olarak kodlanıyor. 3'üncüsü, 1'dir.

relu: Düzeltilmiş doğrusal birim. Nöronlar için popüler bir etkinleştirme işlevi.

sigmoid: Daha önce popüler olan ve özel durumlarda hâlâ kullanışlı olan başka bir etkinleştirme işlevi.

softmax: Bir vektör üzerinde çalışan, en büyük bileşen ile diğer tüm öğeler arasındaki farkı artıran ve ayrıca vektörü, olasılıkların vektörü olarak yorumlanabilecek şekilde 1 olacak şekilde normalleştiren özel bir etkinleştirme işlevi. Sınıflandırıcıların son adımı olarak kullanılır.

tensor: "tensor" matris gibidir ancak rastgele sayıda boyut içerir. 1 boyutlu tensör bir vektördür. 2 boyutlu tensor bir matristir. Sonra 3, 4, 5 veya daha fazla boyuta sahip tensörleriniz olabilir.

Çalışma not defterine geri dönelim ve bu sefer kodu okuyalım.

keras_01_mnist.ipynb

Bu not defterindeki tüm hücrelere göz atalım.

Hücre &parametresi

Veri boyutu grubu, eğitim dönemi sayısı ve konumu burada tanımlanır. Veri dosyaları bir Google Cloud Storage (GCS) paketinde barındırılır, dolayısıyla adresleri gs:// ile başlar

Hücre &th;İçe Aktarma&

TensorFlow ve ayrıca görselleştirmeler için matplotlib dahil olmak üzere, gerekli tüm Python kitaplıkları burada içe aktarılır.

Hücre "görsel yardımcılık programları [RUN ME]"

Bu hücrede ilginç olmayan bir görselleştirme kodu bulunuyor. Varsayılan olarak daraltılmış durumdadır. Ancak, kodu çift tıkladığınızda kodu açabilir ve zamanınız olduğunda koda bakabilirsiniz.

Hücre "tf.data.Dataset: Dosyaları ayrıştırıp eğitim ve doğrulama veri kümelerini hazırlama&";

Bu hücre, veri dosyalarından MNIST veri kümesini yüklemek için tf.data.Dataset API'sini kullandı. Bu hücreye çok fazla zaman harcamanız gerekmez. tf.data.Dataset API'siyle ilgileniyorsanız TPU hız veri ardışık düzenleri başlıklı bunu açıklayan bir eğitim bulabilirsiniz. Şu an için temel bilgiler aşağıda verilmiştir:

MNIST veri kümesindeki resim ve etiketler (doğru yanıtlar) 4 dosyada sabit uzunluklu kayıtlarda depolanır. Dosyalar, özel sabit kayıt işleviyle yüklenebilir:

imagedataset = tf.data.FixedLengthRecordDataset(image_filename, 28*28, header_bytes=16)

Artık resim baytlarından oluşan bir veri kümesine sahibiz. Bunların kod çözme işlemi resimlere dönüştürülmesi gerekir. Bunu yapacak bir işlev tanımlıyoruz. Resim sıkıştırılmaz ve bu nedenle işlevin kodu çözmesi gerekmez (decode_raw aslında hiçbir şey yapmaz). Resim, daha sonra 0 ile 1 arasında kayan nokta değerlerine dönüştürülür. Burada resmi 2D resim olarak yeniden şekillendirebiliriz. Aslında, başlangıçtaki yoğun katmanımız beklediğimiz gibi, bunu 28*28 boyutunda düz bir piksel dizisi olarak tutuyoruz.

def read_image(tf_bytestring):
    image = tf.decode_raw(tf_bytestring, tf.uint8)
    image = tf.cast(image, tf.float32)/256.0
    image = tf.reshape(image, [28*28])
    return image

Bu işlevi, .map kullanarak veri kümesine uygularız ve resimlerden oluşan bir veri kümesi elde ederiz:

imagedataset = imagedataset.map(read_image, num_parallel_calls=16)

Etiketler için aynı şekilde okuma ve kod çözme işlemini gerçekleştiririz ve resimler ile etiketleri .zip.

dataset = tf.data.Dataset.zip((imagedataset, labelsdataset))

Artık bir çift veri kümesimiz (resim, etiket) var. Modelimizin beklentileri de budur. Eğitim işlevinde henüz bu özelliği kullanmaya hazır değiliz:

dataset = dataset.cache()
dataset = dataset.shuffle(5000, reshuffle_each_iteration=True)
dataset = dataset.repeat()
dataset = dataset.batch(batch_size)
dataset = dataset.prefetch(tf.data.experimental.AUTOTUNE)

tf.data.Dataset API, veri kümelerini hazırlamak için gereken tüm yardımcı işleve sahiptir:

.cache, veri kümesini RAM'de önbelleğe alır. Bu, küçük bir veri kümesidir ve çalışır. .shuffle, 5.000 öğeden oluşan bir tamponla karışık çalıyor. Eğitim verilerinin iyi bir şekilde karıştırılması önemlidir. .repeat, veri kümesini döngüye alır. Bunun üzerinde birkaç kez (birden çok dönem) eğitim vereceğiz. .batch, birden fazla resim ve etiketi bir mini tırnak içinde bir araya getirir. Son olarak, .prefetch mevcut CPU GPU'da eğitilirken bir sonraki grubu hazırlamak için CPU'yu kullanabilir.

Doğrulama veri kümesi de benzer şekilde hazırlanır. Şimdi bir model tanımlamaya ve bu veri kümesini eğitmek için bu veri kümesini kullanıyoruz.

Hücre "Keras Modeli"

Tüm modellerimiz düz katman dizileri olur, dolayısıyla bunları oluşturmak için tf.keras.Sequential stilini kullanabiliriz. Başlangıçta bu, tek bir yoğun katman. El yazısı rakamlarını 10 sınıfta sınıflandırdığımız için 10 nöron vardır. Bir sınıflandırıcıdaki son katman olduğu için "softmax" aktivasyonunu kullanır.

Keras modelinin girişlerinin şeklini de bilmesi gerekir. tf.keras.layers.Input, bunu tanımlamak için kullanılabilir. Burada giriş vektörleri, 28*28 uzunlukta piksel değerlerinin düz vektörleridir.

model = tf.keras.Sequential(
  [
    tf.keras.layers.Input(shape=(28*28,)),
    tf.keras.layers.Dense(10, activation='softmax')
  ])

model.compile(optimizer='sgd',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# print model layers
model.summary()

# utility callback that displays training curves
plot_training = PlotTraining(sample_rate=10, zoom=1)

Model, Keras'ta model.compile işlevi kullanılarak yapılandırılıyor. Burada, temel optimize edici 'sgd' (Olasılıksal Gradyan İniş) kullanıyoruz. Sınıflandırma modeli, Keras'ta 'categorical_crossentropy' adı verilen bir çapraz entropi kayıp işlevi gerektirir. Son olarak, modelden doğru şekilde sınıflandırılmış resimlerin yüzdesi olan 'accuracy' metriğini hesaplamasını isteriz.

Keras, oluşturduğunuz modelin ayrıntılarını yazdıran çok kullanışlı bir model.summary() yardımcı programı sunuyor. Öğretmeniniz PlotTraining görselleştirme aracını ekledi ("görselleştirme yardımcı programları"hücresinde tanımlanır), eğitim sırasında çeşitli eğitim eğrileri görüntüler.

Hücreyi eğitip eğitin.

Burada eğitim, model.fit adını alıp hem eğitim hem doğrulama veri kümelerini ileterek gerçekleşir. Varsayılan olarak Keras, her dönemin sonunda bir doğrulama turu gerçekleştirir.

model.fit(training_dataset, steps_per_epoch=steps_per_epoch, epochs=EPOCHS,
          validation_data=validation_dataset, validation_steps=1,
          callbacks=[plot_training])

Keras'ta eğitim sırasında geri çağırma kullanılarak özel davranışlar eklenebilir. Dinamik olarak güncellenen eğitim grafiği bu atölyede bu şekilde uygulanmıştır.

Hücreler: Tahminleri görselleştirin

Model eğitildikten sonra model.predict() çağrısı yaparak modelden tahmin alabiliriz:

probabilities = model.predict(font_digits, steps=1)
predicted_labels = np.argmax(probabilities, axis=1)

Burada, test için yerel yazı tiplerinden oluşturulan bir dizi basılı sürüm hazırladık. Nöral ağın son "softmax" değerinden 10 olasılık vektörü döndürdüğünü unutmayın. Etiketi elde etmek için, hangi olasılığın en yüksek olduğunu öğrenmemiz gerekir. Bunu kitaplık kitaplığından np.argmax yapar.

axis=1 parametresinin neden gerekli olduğunu anlamak için 128 görüntüden oluşan bir grubu işlediğimizi ve bu nedenle modelin 128 olasılık vektörü döndürdüğünü lütfen unutmayın. Çıkış tensörünün şekli [128, 10]'dur. Her bir resim için döndürülen 10 olasılık üzerinde argümanı hesaplıyoruz. Bu nedenle axis=1 (ilk eksen 0'dır).

Bu basit model, rakamların% 90'ını zaten tanır. Fena değil ama şimdi bunu önemli ölçüde iyileştireceksiniz.

godeep.png

Tanıma doğruluğunu iyileştirmek için nöral ağa daha fazla katman ekleriz.

Ekran Görüntüsü, 27.07.2016 15.36.55.png

Softmax'ı, son katmanda etkinleştirme işlevi olarak tutarız. Çünkü sınıflandırma için bu işlev en çok işe yarar. Ara katmanlarda ise en klasik etkinleştirme işlevini kullanırız: sigmoid:

Örneğin, modeliniz şu şekilde görünebilir (virgülleri unutmayın, tf.keras.Sequential katmanların virgülle ayrılmış listesini alır):

model = tf.keras.Sequential(
  [
      tf.keras.layers.Input(shape=(28*28,)),
      tf.keras.layers.Dense(200, activation='sigmoid'),
      tf.keras.layers.Dense(60, activation='sigmoid'),
      tf.keras.layers.Dense(10, activation='softmax')
  ])

Modelinizin "özetine" bakın. Artık en az 10 kat daha fazla parametreye sahip. 10 kat daha iyi! Ancak bir nedenle ...

Kayıp, çatıyı da yıkmış gibi görünüyor. Doğru olmayan bir şeyler var.

İnsanlar 80&93 ve 90'larda tasarlanan tasarımlara sahip olduğu için nöral ağları da deneyimlediniz. "AI kışı" denen bu fikirden vazgeçip şaşmalarına gerek yok. Katman ekledikçe nöral ağların birbirine yaklaşması daha da zorlaşmaktadır.

Çok sayıda katmanı (şu anda 100, 50 ve hatta 100) içeren derin nöral ağların birbirine yaklaşmalarını sağlayacak birkaç matematiksel kirli püf noktası olması çok işe yarayabilir. Bu basit hilelerin keşfedilmesi, 2010'larda derin öğrenmenin rönesansını nedenlerinden biridir.

RELU etkinleştirme

relu.png

Sigmoid etkinleştirme işlevi derin ağlarda oldukça sorunludur. 0 ile 1 arasındaki tüm değerleri bastırır. Tekrar yaptığınızda nöron çıkışları ve gradyanları tamamen kaybolabilir. Tarihsel nedenlerden dolayı bahsedilmiş olsa da, modern ağlar aşağıdaki gibi görünen RELU'yu (Düzeltilmiş Doğrusal Birim) kullanır:

Öte yandan regl, en azından sağ tarafında 1 türevi içeriyor. RELU etkinleştirmesi sayesinde, bazı nöronlardan gelen gradyanlar sıfır olsa bile her zaman sıfır olmayan bir gradyan veren daha net gradyanlar olur ve eğitim iyi bir hızda devam edebilir.

Daha iyi bir optimize edici

Buradaki çok yüksek boyutlu alanlarda, yani 10 bin ağırlık ve önyargı sırasına göre sıklıkla çalışıyoruz. Bunlar, yerel minimum olmayan değerlerdir, ancak yine de gradyan sıfır değildir ve gradyan iniş optimize edici bu noktada kalır. TensorFlow'da, en yüksek düzeyde durağanlıkla çalışan ve eyer noktalarından güvenli bir şekilde yelken açan birçok optimize edici bulunmaktadır.

Rastgele başlatmalar

Ağırlıklandırma ağırlıklandırmasını başlatmadan önce sanatta başlı başına bir araştırma alanı bulunur. Bu alanda bu konu hakkında çok sayıda makale yayınlanır. Keras'ta kullanıma sunulan tüm başlatıcılara buradan göz atabilirsiniz. Neyse ki Keras varsayılan olarak doğru şeyi yapıyor ve neredeyse her durumda en iyisi olan 'glorot_uniform' başlatıcıyı kullanıyor.

Keras zaten doğru olanı yaptığı için yapılacak bir şey yok.

Yok mu?

Çapraz entropi formülü, bir logaritma içerir ve log(0), bir Sayı Değil (NaN, tercihen sayısal bir kilitlenmedir). Çapraz entropi girişi 0 olabilir mi? Giriş, aslında üstel olan bir softmax'tan gelir ve üstel hiçbir zaman sıfır olmaz. Yani güvendeyiz!

Gerçekten mi? Matematik dünyasının güzel dünyasında güvende olurduk, ancak bilgisayar dünyasında, float32 biçiminde temsil edilen exp(-150), ZERO'un sıfır olmasına ek olarak çapraz darbeli sistemde kilitleniyor.

Neyse ki Keras bu işi hallettiğinden ve softmax değerini ve ardından çapraz entropiyi sayısal hesaplamalar yaparak güvenli bir şekilde hesaplamaya ve korkutucu NaNN'lerden kaçınmaya karar verdiği için burada herhangi bir şey yapmanız gerekmez.

Başarılı mı?

Şimdi% 97'lik doğruluk seviyesine ulaşıyoruz. Bu atölyede amaç% 99'un üzerine çıkmaktır. Bu yüzden devam edelim.

Takıldığınız noktalar varsa aşağıdaki çözümleri uygulayabilirsiniz:

keras_02_mnist_dense.ipynb

Belki daha hızlı eğitmeyi deneyebiliriz. Adam optimize edicideki varsayılan öğrenme hızı 0,001'dir. Artırmaya çalışalım.

Daha hızlı olmak, pek yararlı olmamış olabilir ve bu ne kadar gürültü çıkarıyor?

Eğitim eğrileri çok gürültülüdür ve her iki doğrulama eğrisine de bakar: Onlar yukarı ve aşağı atlar. Bu, çok hızlı olmamız gerektiği anlamına geliyor. Önceki hızımıza dönebilirdik ancak bunun için daha iyi bir yol var.

yavaşlatma.png

Hızlı başlangıç yapmak, öğrenme oranını katlanarak azaltmak için iyi bir çözümdür. Bunu Keras'ta tf.keras.callbacks.LearningRateScheduler geri çağırma yöntemiyle yapabilirsiniz.

Kopyalanıp yapıştırılması için yararlı kod:

# lr decay function
def lr_decay(epoch):
  return 0.01 * math.pow(0.6, epoch)

# lr schedule callback
lr_decay_callback = tf.keras.callbacks.LearningRateScheduler(lr_decay, verbose=True)

# important to see what you are doing
plot_learning_rate(lr_decay, EPOCHS)

Oluşturduğunuz lr_decay_callback öğesini kullanmayı unutmayın. Bunu model.fit içindeki geri çağırma listesine ekleyin:

model.fit(...,  callbacks=[plot_training, lr_decay_callback])

Bu küçük değişikliğin etkisi muhteşem. Gürültünün büyük oranda azaldığını ve test doğruluğunun artık sürekli olarak% 98'in üzerinde olduğunu görüyorsunuz.

Modelin şu anda birbirine yakın olduğu görülüyor. Daha derine inmeye çalışalım.

Yardımcı oldu mu?

Doğruluk oranı, hâlâ% 98'de takılıp kalıyor ve doğrulama kaybına bakıyor. Yükseliyor! Öğrenme algoritması yalnızca eğitim verileri üzerinde çalışır ve eğitim kaybını buna uygun olarak optimize eder. Doğrulama verilerini hiçbir zaman görmez. Bu nedenle, çalışmasının bir süre sonra artık geçerliliğini yitirmesi nedeniyle doğrulama işlemini kaybetmesi ve bazen geri dönmesi şaşırtıcı değildir.

Bu durum, modelinizin gerçek dünyadaki tanıma özelliklerini hemen etkilemez, ancak birçok yineleme çalıştırmanızı engeller ve genellikle eğitimin artık olumlu bir etkisi olmadığı anlamına gelir.

dropout.png

Bu bağlantı genellikle "yüksek sığdırma" olarak adlandırılır. Bu bağlantıyı gördüğünüzde "bırakma" adlı bir normalleştirme tekniği kullanmayı deneyebilirsiniz. Ayrılma tekniği, her eğitim yinelemesinde rastgele nöronlar yakalar.

İşe yaradı mı?

Gürültü yeniden oluşur (beklentileri ortadan kaldırarak şaşırtıcı şekilde). Doğrulama kaybı artık korkunç değil ancak genel olarak ayrılmadan daha yüksek. Doğrulama doğruluğu da biraz düştü. Bu, son derece üzücü bir sonuç.

Ayrılmanın doğru bir çözüm olmadığı anlaşılıyor. Bu, daha karmaşık bir kavram olabileceği için nedenlerinden bazıları "düşünce" düzeltmesine uygun değil mi?

"Aşırı sığdırma" nedir? Bir nöral ağ, eğitim örneğine uygun şekilde çalışmasına rağmen gerçek dünyadaki verilerde bu kadar iyi olmadığında nöral ağların "kötü" öğrendiği durumlar meydana gelir. Ayrılma sürecini daha iyi öğrenmeye zorlayabilecek normalleştirme teknikleri vardır. Ancak, buna uymanın da kökleri vardır.

Overfitting.png

Bir nöral ağın eldeki sorun için çok fazla serbestlik derecesi olduğunda temel eşleşme gerçekleşir. Çok sayıda nöronumuz olduğunu ve ağın tüm eğitim görüntülerimizi depolayıp bunlara kalıp eşleştirmeyi tanıyabildiğini düşünün. Gerçek hayattaki veriler tamamen başarısız olurdu. Bir nöral ağın, eğitim sırasında öğrendiklerini genelleştirmeye zorlaması için kısmen kısıtlanması gerekir.

Çok az eğitim veriniz varsa küçük bir ağ bile kalbinizin bunu öğrenebilmesini sağlar. Genel olarak, nöral ağları eğitmek için her zaman çok fazla veriye ihtiyacınız vardır.

Son olarak, kitaba ait her şeyi yaptıysanız, özgürlük derecelerinin kısıtlanmış, ayrılmanın uygulanmış ve çok sayıda veri üzerinde eğitilmiş olduğundan emin olmak için farklı ağ boyutlarıyla denemeler yaptıysanız yine de hiçbir şeyin iyileştirilemeyen bir performans düzeyinde takılıp kalabilirsiniz. Bu, nöral ağınızın mevcut şeklinde olduğu gibi verilerinizden daha fazla bilgi çıkaramadığı anlamına gelir.

Resimlerimizi nasıl kullandığımızı tek bir vektörde birleştiriyor musunuz? Bu gerçekten kötü bir fikirdi. El yazısı rakamları şekillerden oluşur ve pikseller düzleştirilirken şekil bilgilerini sildik. Ancak şekil bilgilerinden yararlanabilen bir tür nöral ağ vardır: Evrişimli ağlar. Bunları deneyelim.

Takıldığınız noktalar varsa aşağıdaki çözümleri uygulayabilirsiniz:

keras_03_mnist_dense_lrdecay_dropout.ipynb

Özetle

Bir sonraki paragrafta kalın harflerle yazılmış tüm terimleri zaten biliyorsanız bir sonraki egzersize geçebilirsiniz. Yepyeni bir evlat edinmeye başlıyorsanız lütfen okumaya devam edin.

evrimsel.gif

Resim: Bir resmi, her biri 4x4x3=48 öğrenilebilir ağırlıktan oluşan iki ardışık filtreyle filtreleme.

Basit bir evrimsel nöral ağ Keras'ta şöyle görünür:

model = tf.keras.Sequential([
    tf.keras.layers.Reshape(input_shape=(28*28,), target_shape=(28, 28, 1)),
    tf.keras.layers.Conv2D(kernel_size=3, filters=12, activation='relu'),
    tf.keras.layers.Conv2D(kernel_size=6, filters=24, strides=2, activation='relu'),
    tf.keras.layers.Conv2D(kernel_size=6, filters=32, strides=2, activation='relu'),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(10, activation='softmax')
])

Evrişimli bir katmanda, bir katman nöronun hemen üzerinde, resmin yalnızca küçük bir alanında piksellerin ağırlıklı toplamı bulunur. Bir ön yargı ekler ve toplamı, normal bir katmandaki nöronda olduğu gibi etkinleştirme işleviyle besler. Bu işlem, aynı ağırlıklar kullanılarak resmin tamamında tekrarlanır. Yoğun katmanlarda her nöronun kendi ağırlıkları olduğunu unutmayın. Burada, tek bir ağırlık, resmin iki yönünde de kaydırılır ("dönüş.") Çıktıda, resimdeki piksel sayısı kadar değer vardır (yine kenarlarda dolgu gerekir). Bir filtreleme işlemidir. Yukarıdaki resimde, 4x4x3=48 ağırlıklı bir filtre kullanılmıştır.

Ancak 48 ağırlık yeterli olmayacaktır. Daha fazla serbestlik derecesi eklemek için aynı işlemi yeni bir ağırlık grubuyla tekrarlarız. Bu işlem, yeni bir filtre çıkışı grubu oluşturur. Buna, giriş resminde R,G,B kanallarına benzer şekilde yapılan çıkışın "kanalı" adını verelim.

Ekran Görüntüsü, 29.07.2016 16.02.37.png

İki (veya daha fazla) ağırlık grubu, yeni bir boyut eklenerek bir tensör olarak toplanabilir. Bu, kıvrımlı bir katmandaki ağırlık tensörünün genel şeklini sağlar. Giriş ve çıkış kanallarının sayısı parametreler olduğundan, yığılmış katmanları yığmaya ve zincirleme olarak kullanmaya başlayabiliriz.

Resim: Veri evrişmiş bir nöral ağ, verilerin "küplerini" diğer veri küplerine dönüştürür.

Kısıtlamalı kıvrımlar, maksimum havuzlama

Ayrıca, 2 veya 3 adımlık kıvrımlar gerçekleştirerek elde edilen veri küpünü yatay boyutlarında küçültebiliriz. Bunu yapmanın iki yaygın yolu vardır:

  • Merdivenli kon sadece
  • Maks. havuz: MAX işlemini uygulayan kayan pencere (genellikle 2 pikselde bir, 2 pikselde bir tekrarlanır)

Resim: Bilgilendirme penceresini 3 piksel kaydırmak daha az çıkış değeri sağlar. Birleştirilmiş kıvrımlar veya maksimum yıkama (2'lik açıyla 2x2 pencerelerde maksimum püskürtme), veri küpünü yatay boyutlarda küçültmenin bir yoludur.

Son katman

Son evrim katmanından sonra, veriler "küp" biçimindedir. İçeriği son yoğun katman aracılığıyla beslemenin iki yolu vardır.

İlki, veri küpünü bir vektörde birleştirip ardından softmax katmanına aktarmaktır. Bazen softmax katmanından önce yoğun bir katman bile ekleyebilirsiniz. Bu, ağırlık sayısı açısından pahalı olma eğilimindedir. Evrişimli ağın sonundaki yoğun bir katman, tüm nöral ağın ağırlıklarının yarısından fazlasını içerebilir.

Pahalı bir yoğun katman kullanmak yerine, gelen verileri sınıfı mümkün olduğunca çok parçaya bölebilir, bunların değerlerini ortalama alabilir ve bunları bir softmax etkinleştirme işleviyle besleyebiliriz. Sınıflandırma başlığı oluşturmak için kullanılan bu yol 0 ağırlıktır. Keras'ta bunun için bir katman vardır: tf.keras.layers.GlobalAveragePooling2D().

Eldeki soruna yönelik çığır açan bir ağ oluşturmak için bir sonraki bölüme geçin.

El yazısıyla basamak tanıma için kıvrımlı bir ağ oluşturalım. Üstte üç kıvrımlı katmanı kullanacağız: Alttaki geleneksel softmax okuma katmanımız ve bunları tamamen bağlı bir katmanla birleştireceğiz:

İkinci ve üçüncü evrişme katmanlarında çıkış değerlerinin sayısını neden 28x28'den 14x14'e ve ardından 7x7'ye düşürdüklerini açıklayan iki adımın bulunduğuna dikkat edin.

Keras kodunu yazalım.

İlk evrim katmanından önce özel dikkat gerekir. Aslında 3B verinin küpünü bekliyor. Ancak veri kümeniz şu ana kadar yoğun katmanlar için ayarlanmış ve resimlerin tüm pikselleri bir vektöre sabitlenmiş. Bunları 28x28x1 boyutundaki resimler halinde yeniden şekillendirmemiz gerekir (gri tonlamalı resimler için 1 kanal):

tf.keras.layers.Reshape(input_shape=(28*28,), target_shape=(28, 28, 1))

Şu ana kadar sahip olduğunuz tf.keras.layers.Input katmanı yerine bu satırı kullanabilirsiniz.

Keras'ta, "relu' tarafından etkinleştirilmiş evrişim katmanı söz dizimi:

tf.keras.layers.Conv2D(kernel_size=3, filters=12, padding='same', activation='relu')

Sert bir devrim için şunu yazmanız gerekir:

tf.keras.layers.Conv2D(kernel_size=6, filters=24, padding='same', activation='relu', strides=2)

Bir küp veriyi yoğun bir katman tarafından tüketilebilecek şekilde bir vektöre sabitlemek için:

tf.keras.layers.Flatten()

Yoğun katmanda söz dizimi değişmedi:

tf.keras.layers.Dense(200, activation='relu')

Modeliniz% 99 doğruluk engelini aştı mı? Çok yaklaştınız... Ancak doğrulama kaybı eğrisine bakın. Bu zil çalıyor mu?

Tahminlere de bakın. İlk kez, 10.000 test basamağının çoğunun artık düzgün bir şekilde tanındığını görürsünüz. Yalnızca yaklaşık 41⁄2 hatalı algılama satırı kalır (10.000 satırdan yaklaşık 110 basamaklı sayı)

Takıldığınız noktalar varsa aşağıdaki çözümleri uygulayabilirsiniz:

keras_04_mnist_convolutional.ipynb

Önceki eğitimde aşırı uyuma belirtileri açıkça görülmektedir (ancak% 99'luk doğruluk oranı hâlâ düşüktür). Tekrar ayrılmayı deneyelim mi?

Bu kez nasıl geçti?

Ayrılma sürecinin bu sefer işe yaradığı anlaşılıyor. Doğrulama kaybı artık ürkütmüyor. Nihai doğruluk %99'un çok üzerinde olmalıdır. Tebrikler!

İlk ayrılma işlemini denediğimizde, aslında nöral ağın mimarisinde soruna neden olan bir sorun yaşadığımızı düşündük. Evrişim katmanları olmadan daha fazlasını yapamazdık ve bu konuda hiçbir şey yapılamamaktadır.

Bu sefer sorunun nedeninin büyük çözüm bulmak olduğu anlaşılıyor. Unutmayın, eğitim kaybı ve doğrulama kaybı eğrileri arasında bağlantı kesilmesine neden olabilecek ve doğrulama kaybının ortadan kalkmasının birçok nedeni vardır. Aşırıya kaçma (çok fazla özgürlük, ağ tarafından kötü kullanılmış) onlardan sadece biri. Veri kümeniz çok küçükse veya nöral ağınızın mimarisi yeterli değilse kayıp eğrilerinde benzer bir davranış görebilirsiniz. Ancak bu farkın azalması işe yaramaz.

Son olarak, toplu normalleştirme eklemeyi deneyelim.

Teoride pratikte birkaç kurala dikkat edin:

Şimdilik kitaptan oynayalım ve her nöral ağ katmanına fakat sonuncuya bir toplu norm katmanı ekleyelim. Son "softmax" katmanına eklemeyin. Orada faydalı olmaz.

# Modify each layer: remove the activation from the layer itself.
# Set use_bias=False since batch norm will play the role of biases.
tf.keras.layers.Conv2D(..., use_bias=False),
# Batch norm goes between the layer and its activation.
# The scale factor can be turned off for Relu activation.
tf.keras.layers.BatchNormalization(scale=False, center=True),
# Finish with the activation.
tf.keras.layers.Activation('relu'),

Şu anda doğruluk nasıl?

ufak bir ince ayar (BATCH_SIZE=64, öğrenme oranı azalma parametresi 0.666, yoğunluk katmanı 0.3) ve biraz şansla %99, 5'e ulaşabilirsiniz. Öğrenim oranı ve ayrılma düzenlemeleri, toplu norm kullanımıyla ilgili "en iyi uygulamalar" uygulanarak yapılmıştır:

  • Toplu norm, nöral ağların birleşmesine yardımcı olur ve genellikle daha hızlı eğitmenize olanak tanır.
  • Toplu norm normalleştiricidir. Genellikle kullandığınız ayrılma miktarını azaltabilir veya hiç kullanamazsınız.

Çözüm not defterinin% 99,5'lik bir eğitim çalışması vardır:

keras_05_mnist_batch_norm.ipynb

GitHub'daki mlengine klasöründe kodun buluta hazır sürümünü ve Google Cloud AI Platform'da çalıştırma talimatlarını bulabilirsiniz. Bu bölümü çalıştırabilmek için Google Cloud hesabı oluşturmanız ve faturalandırmayı etkinleştirmeniz gerekir. Laboratuvarı tamamlamak için gereken kaynaklar birkaç saatten az olmalıdır (bir GPU'da 1 saatlik eğitim süresi varsayılır). Hesabınızı hazırlamak için:

  1. Bir Google Cloud Platform projesi oluşturun (http://cloud.google.com/console).
  2. Faturalandırmayı etkinleştirin.
  3. GCP komut satırı araçlarını yükleyin (GCP SDK'sını buradan edinebilirsiniz).
  4. Bir Google Cloud Storage paketi oluşturun (bu paket us-central1 bölgesinde yer alır). Eğitim kodunu hazırlamak ve eğitilen modelinizi depolamak için kullanılır.
  5. Gerekli API'leri etkinleştirin ve gerekli kotaları isteyin (eğitim komutunu bir kez çalıştırın ve nelerin etkinleştirileceğini belirten hata mesajları alırsınız).

İlk nöral ağınızı oluşturdunuz ve% 99'a kadar doğrulukla eğittiniz. Yol boyunca öğrenilen teknikler MNIST veri kümesine özel değildir. Bunlar nöral ağlarla çalışırken yaygın bir şekilde kullanılır. Hediyelik eşya hediyesi olarak laboratuvar için çizgi film biçiminde "notlar" kartı verilmiştir. Bu bilgileri, öğrendiklerinizi hatırlamak için kullanabilirsiniz:

uçurum notları tensorflow lab.png

Sonraki adımlar

  • Tamamen birbirine bağlı ve evrilmiş ağlardan sonra, yinelenen nöral ağlara göz atmanız gerekir.
  • Google Cloud, eğitiminizi veya çıkarımınızı bulutta dağıtılmış bir altyapıda çalıştırmak için AI Platform sunar.
  • Son olarak, geri bildirim almak istiyoruz. Bu laboratuvarda yanlış bir şey görürseniz veya geliştirilmesi gerektiğini düşünüyorsanız lütfen bize bildirin. Geri bildirimleri GitHub'ın sorunları [feedback link] üzerinden ele alırız.

İK.png

Martin Görner kimliği small.jpg

Yazar: Martin Görner

Twitter: @martin_gorner

Bu laboratuvar telif hakkıyla sunulan tüm çizgi film resimleri: alexpokusay / 123RF stok fotoğraflar