Evrişimin üstüne yeni işlemler (kod makaleleri) Makine öğreniminde karşılaşacağınız "çukurlar"

Keras'ta evrişim ve havuzlama kullanımı

Evrişim işlemi, yerel olarak ilişkili verilerde ağırlık paylaşımı yoluyla daha iyi bir temsil elde eder, böylece onu ayrı bir katman olarak ele alabiliriz.Keras'ta tek boyutlu evrişim, iki boyutlu evrişim ve üç boyutlu evrişim sağlanır. Ürünler ve bunların kırpma, devrik ve ayrılabilir gibi bazı varyantları, burada esas olarak en temel ve en yaygın iki boyutlu evrişimi tanıtıyoruz ve görüntünün perspektifinden parametrelerin anlamını açıklıyoruz.

keras.layers'dan Conv2D'yi içe aktarın

Conv2D (filtreler = 32, kernel_size = (3,3), adımlar = (1,1), \

padding = 'aynı', aktivasyon = 'relu', dilation_rate = 1)

Buradaki filtreler parametresi, kaç tane evrişim çekirdeğinin kullanıldığıdır ve bu katmandan sonra görüntünün derinliğini de belirler. kernel_size, evrişim çekirdeğinin boyutunu belirler, adımlar her hareketin adım uzunluğudur, bir tam sayı olabilir, bu da aynı adım uzunluğunun her seferinde iki yönde hareket ettiği anlamına gelir veya bir tuple olabilir, yani sırasıyla iki yönde Hiçbir senkronizasyon uzun değil. Aktivasyon, aktivasyon fonksiyonudur.Erişimden sonra çıkarılan öznitelikler üzerinde doğrusal olmayan işlem yapmamız gerekir.

Dolgu parametresi "geçerli" ve "aynı" olabilir, burada ayrıntılı olarak açıklanmalıdır, geçerli, geçerli evrişime karşılık gelir ve aynı, aynı evrişime karşılık gelir. Etkili evrişim, evrişim çekirdeği hareket ederken, ziyaret ettiği alanın her zaman tüm evrişim çekirdeğini çevreleyeceği anlamına gelir.Başka bir deyişle, bölünemeyen bir durum varsa, 7 * 7 görüntüsü, 2 * 2'nin evrişim çekirdeği, adım boyutu 2'dir, bu durumda efektif evrişimin erişilemez alanları vardır; aynı evrişim sınırı sıfır pikselle doldurmaktır, böylece görüntünün boyutu, evrişim çekirdeği ve adım boyutu ne olursa olsun Çıktı her zaman girişle aynı boyutta olacaktır. Ancak bu, sıfır elementin varlığından dolayı sınır yakınında çıkarılan özelliklerin zayıf kalmasına neden olacaktır.

Son parametre, genişleme oranını kontrol eden delik evrişim parametresidir. İçi boş evrişim, parametreleri artırmadan orijinal evrişim çekirdeğini genişletmeyi ifade eder. Orijinal evrişim işlemi, 3 * 3 evrişim çekirdeğinin 3 * 3 alanına etki etmesidir ve genişleme_ hızı = 2 ayarlandıktan sonra, delik evrişimi özellik aralığını bir dereceye kadar genişleten 5 * 5 alanı üzerinde hareket edecektir. . (Bu bölüm hakkında, sonraki derslerde detaylı olarak tanıtacağım)

Havuzlama katmanı prensipte ve uygulamada nispeten basittir.İki boyutlu ortalama havuzlamaya ve maksimum havuzlama işlemlerine odaklanıyoruz:

keras.layers'dan içe aktar

MaxPooling2D, AveragePooling2DMaxPooling2D (pool_size = (2, 2), padding = 'valid')

OrtalamaHavuzlandırma2D (pool_size = (2, 2), padding = 'valid')

Pool_size parametresi, azaltılacak oranı belirtir ve bunu (2, 2) olarak ayarlamak, orijinal görüntünün uzunluğunu ve genişliğini orijinalin yarısına düşürmek anlamına gelir. Dolgu parametresi, evrişimli katmanla aynı etkiye sahiptir.

Araştırma planı ve yöntemi

Aşağıdaki konuları tartışmaya çalışıyoruz:

  • Parametre sayısının değişmeden kaldığı varsayıldığında, evrişim kullanımı görüntü tanımanın doğruluğunu artırabilir mi?
  • Evrişim havuzlama ile kullanılmalı mı?

Eğitim için hala MNIST veri setini kullanıyoruz, önceki yapıyı kullanmaya devam ediyoruz (veya etkisini daha iyi görebilmek için ağı daha derinleştirebiliriz) ve eğitim sonuçlarını kaydediyoruz. Şu anda optimizasyondan çok modelin performansına daha fazla dikkat etmeliyiz.

Evrişim, görüntü tanıma performansını iyileştirir

Evrişim işlemi daha iyi bir temsil elde etmektir.İki modelin temsil performansını karşılaştırdığımızda, optimizasyonun etkisini en aza indirmeliyiz Optimizasyon sürecini modelin potansiyelinin bir keşfi olarak anlayabiliriz. Optimizasyon sürecinin iyi olduğuna dair bir garanti yoktur ve modellerin artılarını ve eksilerini gerçekten karşılaştıramayız. Aynı zamanda, iki modelin eğitilebilir parametrelerinin kabaca aynı olduğundan emin olmamız gerekir.Evrişimin gerçekten etkili olduğunu kanıtlamanız gerekiyorsa, en iyisi evrişim modelinin parametrelerinin sıradan modelin parametrelerinden daha küçük olmasıdır, ancak performans sıradan modelden daha iyi olacaktır.

Bir önceki bölümde Toplu Normalizasyonun güçlü performansını görmüştük, bu nedenle BN katmanını normal modelde yer alan tam bağlantılı katmana ekliyoruz ve bunu bir fonksiyon olarak yazıyoruz:

keras.layers'dan girişi içe aktar

keras.models'ten içe aktarma Modeli

keras.layers'dan Yoğun, Etkinleştirme, Düzleştir

keras.layers'dan BatchNormalization'ı BN olarak içe aktarın

def Dense_bn (x, birimler):

x = Yoğun (birimler) (x)

x = BN () (x)

x = Etkinleştirme ('relu') (x)

dönüş x

Burada tam bağlantılı katmanı, BN katmanını ve aktivasyon işlevi katmanını tek bir katmana yazıyoruz, böylece modelimiz hızlı bir şekilde şöyle yazılabilir:

keras.layers'dan Conv2D, MaxPooling2D'yi içe aktarın

def normal_model ():

x = Girdi (şekil = (28 * 28,))

x2 = Yoğun_bn (x, 1000)

x3 = Yoğun_bn (x2,512)

x4 = Yoğun_bn (x3,256)

y = Yoğun (10, etkinleştirme = 'softmax') (x4)

model = Model (girdiler = x, çıktılar = y)

model.compile (optimize edici = 'SGD', \

kayıp = 'categorical_crossentropy', \

metrics =)

dönüş (model)

İki gizli katman olduğu görülebilmektedir ve eğitim parametreleri aşağıdaki gibidir:

Toplam parametreler: 1,438,482

Eğitilebilir parametreler: 1,434,946

Eğitilemez parametreler: 3,536

Optimizasyonu sağlamak için, evrişimli katman için Toplu Normalleştirme yapmak en iyisidir, yine de bunu bir katman olarak yazıyoruz:

def Conv2D_bn (x, filtreler, uzunluk, genişlik, \

padding = 'aynı', adım sayısı = (1, 1)):

x = Dönüşüm2D (filtreler, (uzunluk, genişlik), \

strides = strides, padding = padding) (x)

x = BN () (x)

x = Etkinleştirme ('relu') (x)

dönüş x

Bu temelde, iki evrişimli katman içeren bir model oluşturuyoruz:

def conv_model ():

x = Girdi (şekil = (28,28,1))

x2 = Dönş2D_bn (x, 64,3,3)

x3 = Dönüşüm2D_bn (x2,32,3,3)

x4 = Düzleştir () (x3)

x5 = Yoğun_bn (x4,32)

y = Yoğun (10, etkinleştirme = 'softmax') (x5)

model = Model (girdiler = x, çıktılar = y)

model.compile (optimize edici = 'SGD', \

kayıp = 'categorical_crossentropy', \

metrics =)

dönüş (model)

Modelin eğitilebilir parametreleri aşağıdaki gibidir:

Toplam parametreler: 822.794

Eğitilebilir parametreler: 822.538

Eğitilemez parametreler: 256

Oluşturduğumuz evrişimli sinir ağının parametrelerinin sıradan modelden daha küçük olduğunu ve birincisinin model karmaşıklığının ikincisinden daha küçük olması gerektiğini bulabiliriz.

Ardından, modelin artılarını ve eksilerini hızlı bir şekilde test etmek için, sadece 10.000 örnek seçiyoruz, çünkü 60.000 örneğin optimizasyonu çok yavaş. Aynı zamanda, etkisini gözlemlemek için bu 10.000 örneğin bir kısmını doğrulama setine bölün. Bu iki farklı model için, yakınsama hızını basitçe karşılaştırmak anlamsızdır.Sonunda doğrulama setindeki performansı yani doğruluk oranını elde etmemiz gerekiyor.

matplotlib.pyplot dosyasını plt olarak içe aktar

seaborn'u sns olarak ithal etmek

model_1 = normal_model ()

his1 = model_1.fit (X_train_normal, train_labels, \

batch_size = 128, validation_split = 0.3, \

ayrıntılı = 1, epochs = 10)

model_2 = conv_model ()

his2 = model_2.fit (X_train_conv, train_labels, batch_size = 128, \ validation_split = 0.3, verbose = 1, \

epochs = 10)

w2 = his2.history

w1 = his1.history

sns.set (style = 'whitegrid')

plt.plot (aralık (10), w1, 'b -.', etiket = 'Normal tren')

plt.plot (aralık (10), w2, 'r -.', etiket = 'CNN treni')

plt.plot (aralık (10), w1, 'b -', etiket = 'Normal test')

plt.plot (aralık (10), w2, 'r -', etiket = 'CNN testi')

plt.xlabel ('epochs')

plt.ylabel ('doğruluk')

plt.legend () plt.show ()

Şekilde gösterildiği gibi, sıradan tamamen bağlı modelin parametreleri CNN'ninkinden çok daha büyük olsa bile, eğitim ve testin doğruluğunun neredeyse her çağda CNN'inki kadar iyi olmadığını görebiliriz.Ortalama olarak, CNN'nin doğruluğu tamamen bağlı modelden daha yüksektir. Yüzde üç puan dışında, CNN'in MNIST'te tamamen bağlı sinir ağından daha iyi bir model olduğunu söylemek için nedenimiz var.

Havuzlama işlemlerinin faydası

Yukarıdaki modele havuzlama işlemi eklemedik, havuzlama eklersek CNN daha iyi performans gösterir mi? Ve ortalama havuzlama ve maksimum havuzlama etkileri aynı olacak mı?

İlk evrişim işlemi katmanına maksimum bir havuz katmanı ekliyoruz, böylece nihai çıktı boyutu orijinalin yarısı olur (alan 1/4 olur):

def conv_model_pooling ():

x = Girdi (şekil = (28,28,1))

x2 = Dönş2D_bn (x, 64,3,3)

x3 = MaksHavalama2D (2) (x2)

x4 = Dönş2D_bn (x3,32,3,3)

x5 = Düzleştir () (x4)

x6 = Yoğun_bn (x5,32)

y = Yoğun (10, etkinleştirme = 'softmax') (x6)

model = Model (girdiler = x, çıktılar = y)

model.compile (optimizer = 'SGD', loss = 'categorical_crossentropy', \

metrics =)

dönüş (model)

Yukarıdaki eğitimle tutarlı olarak şunları alabiliriz:

Şekilde gösterildiği gibi, CNN'nin maksimum havuzlama işlemi ile performansının normal tam bağlantı ile havuzlama olmadan CNN arasında olduğunu ve doğrulama setinin doğruluğunun orijinal CNN'ye çok yakın olduğunu görebiliriz.

Benzer şekilde, her dönemin doğruluğunu elde etmek için ortalama havuzlama işlemini kullanabilir ve yukarıdaki şekle ekleyebiliriz:

Şekilde gösterildiği gibi, siyah çizgi ve yeşil çizgi neredeyse örtüşüyor ve ortalama havuzlama ve maksimum havuzlama bu örnekte aynı rolü oynuyor.

Öyleyse bu örnekte, havuzlama işleminin önemi nedir? Maksimum havuzlamaya sahip CNN eğitilebilir parametre sayısının şu hale geldiğini fark edebiliriz:

Toplam parametreler: 220,682

Eğitilebilir parametreler: 220.426

Eğitilemez parametreler: 256

Maksimum havuzlama, modelin parametre sayısını büyük ölçüde azaltır, ancak yine de iyi bir performans elde edebilir. Aslında, pratikte, havuzlamanın temel işlevi görüntünün çeviri değişmezliğini varsaymak ve ağın istatistiksel verimliliğini artırmaktır, ancak doğruluk mutlaka iyileştirilmeyebilir.

Yazar: Monkey Head & Shoulders'ın yeniden yazdırılmasına gerek yoktur, lütfen sahne arkasında bir mesaj bırakın, normlara uyun yeniden yazdırın
Güç artışı / dört tekerlekten çekiş kutsama Mercedes-Benz A220 / A220L dört tekerlekten çekişli versiyon açıklandı
önceki
Haima 8S resmi olarak Şangay Otomobil Fuarı'nda görücüye çıktı
Sonraki
Bu şiddetle tavsiye edilen tarayıcı uzantıları, reklamlar + web sayfası çevirisine vb. Gidin.
Bugünün temel sesi | Apple, Çin cüzdanına odaklanan ve yüksek fiyatlı bir strateji benimseyen muhteşem bir yeni ürün daha piyasaya sürdü.
Üç büyük operatör 5G pilotlarının lansmanını duyurdu ve 5G pilot şehirlerinin ilk partisi önceden bilgilendirildi
ACL 2018 University of Kent: Dağıtılmış İlişki Vektörlerinin Denetimsiz Öğrenme Yöntemi
Büzülmüş bir otobüs gibi! Dongfeng Sharing-VAN konsept otomobili resmi olarak tanıtıldı
Huawei Mate20 tamamen açığa çıktı, son sürüm olabilir
Baidu Alliance Summit'te Robin Li, yeni AI düşüncesini vurguladı
Hizmet faturasından sonra, paket veri ücreti de kademeli bir ücrete tabi olacaktır.
Batı Sichuan Yemek Turu, akşam yemeği sırasında okumak için uygun!
Gençler için ilk retro bluetooth hoparlör, bunun hakkında ne biliyorsun?
Gelecekteki BMW neye benzeyecek? Bırakın Vision iNEXT konsept otomobil size cevabı söylesin
Yeni yerli BMW 3 Serisi standart aks / uzun dingil açıklığı versiyonu resmi olarak tanıtıldı
To Top