Keras - Katmanlar

Daha önce öğrenildiği gibi Keras katmanları, Keras modellerinin birincil yapı taşıdır. Her katman girdi bilgilerini alır, biraz hesaplama yapar ve son olarak dönüştürülen bilgiyi çıkarır. Bir katmanın çıktısı, girdi olarak sonraki katmana akacaktır. Bu bölümde katmanlarla ilgili tüm ayrıntıları öğrenelim.

Giriş

Bir Keras katmanı gerektirir shape of the input (input_shape) giriş verilerinin yapısını anlamak, initializerher bir girişin ağırlığını ayarlamak ve son olarak aktivatörleri çıkışı doğrusal olmayacak şekilde dönüştürmek için. Aradaki kısıtlamalar, oluşturulacak girdi verilerinin ağırlığının ve düzenleyicinin optimizasyon sürecinde ağırlıklara dinamik olarak cezaları uygulayarak katmanı (ve modeli) optimize etmeye çalışacağı aralığı sınırlar ve belirtir.

Özetlemek gerekirse, Keras katmanı eksiksiz bir katman oluşturmak için minimum ayrıntıların altında gerektirir.

  • Giriş verilerinin şekli
  • Katmandaki nöron / birim sayısı
  • Initializers
  • Regularizers
  • Constraints
  • Activations

Bir sonraki bölümde temel kavramı anlayalım. Temel kavramı anlamadan önce, Keras modelinin ve katmanının nasıl çalıştığı hakkında fikir edinmek için Sıralı model API'sini kullanarak basit bir Keras katmanı oluşturalım.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 
from keras import regularizers 
from keras import constraints 

model = Sequential() 

model.add(Dense(32, input_shape=(16,), kernel_initializer = 'he_uniform', 
   kernel_regularizer = None, kernel_constraint = 'MaxNorm', activation = 'relu')) 
model.add(Dense(16, activation = 'relu')) 
model.add(Dense(8))

nerede,

  • Line 1-5 gerekli modülleri alır.

  • Line 7 Sıralı API kullanarak yeni bir model oluşturur.

  • Line 9 yeni yaratır Dense katman ve modele ekleyin. DenseKeras tarafından sağlanan, nöron veya birim sayısını (32) gerekli parametre olarak kabul eden bir giriş seviyesi katmanıdır. Katman ilk katmansa, sağlamamız gerekirInput Shape, (16,)yanı sıra. Aksi takdirde, önceki katmanın çıktısı sonraki katmanın girdisi olarak kullanılacaktır. Diğer tüm parametreler isteğe bağlıdır.

    • İlk parametre, birim (nöron) sayısını temsil eder.

    • input_shape giriş verilerinin şeklini temsil eder.

    • kernel_initializer kullanılacak başlatıcıyı temsil eder. he_uniform fonksiyon değer olarak ayarlanır.

    • kernel_regularizer temsil etmek regularizerkullanılacak olan. Hiçbiri değer olarak ayarlanmıştır.

    • kernel_constraint kullanılacak kısıtlamayı temsil eder. MaxNorm fonksiyon değer olarak ayarlanır.

    • activationkullanılacak aktivasyonu temsil eder. relu işlevi değer olarak ayarlanır.

  • Line 10 ikinci yaratır Dense 16 birimlik katman ve set relu aktivasyon işlevi olarak.

  • Line 11 8 ünite ile son Yoğun katmanı oluşturur.

Temel Katmanlar Kavramı

Temel katman kavramını ve Keras'ın her kavramı nasıl desteklediğini anlayalım.

Giriş şekli

Makine öğreniminde, metin, resim veya videolar gibi her tür girdi verisi önce sayı dizisine dönüştürülür ve ardından algoritmaya beslenir. Giriş numaraları tek boyutlu dizi, iki boyutlu dizi (matris) veya çok boyutlu dizi olabilir. Boyutsal bilgileri kullanarak belirtebilirizshape, bir tamsayı demeti. Örneğin,(4,2) matrisi dört satır ve iki sütunla temsil eder.

>>> import numpy as np 
>>> shape = (4, 2) 
>>> input = np.zeros(shape) 
>>> print(input) 
[
   [0. 0.] 
   [0. 0.] 
   [0. 0.] 
   [0. 0.]
] 
>>>

Benzer şekilde, (3,4,2) üç 4x2 matris koleksiyonuna sahip üç boyutlu matris (iki sıra ve dört sütun).

>>> import numpy as np 
>>> shape = (3, 4, 2) 
>>> input = np.zeros(shape) 
>>> print(input)
[
   [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] 
   [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] 
   [[0. 0.] [0. 0.] [0. 0.] [0. 0.]]
]
>>>

Modelin ilk katmanını (veya modelin giriş katmanını) oluşturmak için, giriş verilerinin şekli belirtilmelidir.

Başlatıcılar

Makine Öğreniminde ağırlık, tüm giriş verilerine atanacaktır. Initializersmodülü, bu başlangıç ​​ağırlıklarını ayarlamak için farklı işlevler sağlar. BazılarıKeras Initializer fonksiyon aşağıdaki gibidir -

Sıfırlar

Oluşturur 0 tüm giriş verileri için.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Zeros() 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Nerede, kernel_initializer modelin çekirdeği için başlatıcıyı temsil eder.

Birler

Oluşturur 1 tüm giriş verileri için.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Ones() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Sabit

Sabit bir değer üretir (örneğin, 5) tüm giriş verileri için kullanıcı tarafından belirtilir.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Constant(value = 0) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)

nerede, value sabit değeri temsil eder

Rastgele Normal

Giriş verilerinin normal dağılımını kullanarak değer üretir.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.RandomNormal(mean=0.0, 
stddev = 0.05, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

nerede,

  • mean Oluşturulacak rastgele değerlerin ortalamasını temsil eder

  • stddev Oluşturulacak rastgele değerlerin standart sapmasını temsil eder

  • seed rastgele sayı oluşturmak için değerleri temsil eder

Rastgele

Giriş verilerinin tek tip dağılımını kullanarak değer üretir.

from keras import initializers 

my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

nerede,

  • minval Oluşturulacak rastgele değerlerin alt sınırını temsil eder

  • maxval Oluşturulacak rastgele değerlerin üst sınırını temsil eder

Normal

Giriş verilerinin kesilmiş normal dağılımını kullanarak değer üretir.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.TruncatedNormal(mean = 0.0, stddev = 0.05, seed = None
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Varyans Ölçekleme

Belirtilen ölçekle birlikte katmanın giriş şekline ve çıktı şekline göre değer üretir.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.VarianceScaling(
   scale = 1.0, mode = 'fan_in', distribution = 'normal', seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   skernel_initializer = my_init))

nerede,

  • scale ölçekleme faktörünü temsil eder

  • mode herhangi birini temsil etmek fan_in, fan_out ve fan_avg değerler

  • distribution ikisinden birini temsil eder normal veya uniform

Varyans Ölçekleme

Bulur stddev aşağıdaki formülü kullanarak normal dağılım için değer ve ardından normal dağılımı kullanarak ağırlıkları bulun,

stddev = sqrt(scale / n)

nerede n temsil etmek,

  • mod için giriş birimi sayısı = fan_in

  • mod için çıkış birimlerinin sayısı = fan_out

  • mod için ortalama giriş ve çıkış birimi sayısı = fan_avg

Benzer şekilde, aşağıdaki formülü kullanarak tekdüze dağılım için sınırı bulur ve ardından düzgün dağılımı kullanarak ağırlıkları bulur,

limit = sqrt(3 * scale / n)

lecun_normal

Giriş verilerinin Lecun normal dağılımını kullanarak değer üretir.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Bulur stddev aşağıdaki formülü kullanarak ve ardından normal dağılımı uygulayın

stddev = sqrt(1 / fan_in)

nerede, fan_in giriş birimlerinin sayısını temsil eder.

lecun_uniform

Giriş verilerinin Lecun düzgün dağılımını kullanarak değer üretir.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.lecun_uniform(seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Bulur limit aşağıdaki formülü kullanarak ve ardından düzgün dağılım uygulayın

limit = sqrt(3 / fan_in)

nerede,

  • fan_in giriş birimlerinin sayısını temsil eder

  • fan_out çıktı birimlerinin sayısını temsil eder

glorot_normal

Giriş verilerinin glorot normal dağılımını kullanarak değer üretir.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.glorot_normal(seed=None) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)

Bulur stddev aşağıdaki formülü kullanarak ve ardından normal dağılımı uygulayın

stddev = sqrt(2 / (fan_in + fan_out))

nerede,

  • fan_in giriş birimlerinin sayısını temsil eder

  • fan_out çıktı birimlerinin sayısını temsil eder

glorot_uniform

Girdi verilerinin glorot üniform dağılımını kullanarak değer üretir.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.glorot_uniform(seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Bulur limit aşağıdaki formülü kullanarak ve ardından düzgün dağılım uygulayın

limit = sqrt(6 / (fan_in + fan_out))

nerede,

  • fan_in giriş birimlerinin sayısını temsil eder.

  • fan_out çıktı birimlerinin sayısını temsil eder

he_normal

Giriş verilerinin normal dağılımını kullanarak değer üretir.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Aşağıdaki formülü kullanarak stddev'i bulur ve ardından normal dağılımı uygular.

stddev = sqrt(2 / fan_in)

nerede, fan_in giriş birimlerinin sayısını temsil eder.

he_uniform

Girdi verilerinin tekdüze dağılımını kullanarak değer üretir.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.he_normal(seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Bulur limit aşağıdaki formülü kullanarak ve sonra düzgün dağılım uygulayın.

limit = sqrt(6 / fan_in)

nerede, fan_in giriş birimlerinin sayısını temsil eder.

Dikey

Rastgele bir ortogonal matris oluşturur.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Orthogonal(gain = 1.0, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

nerede, gain matrisin çarpım faktörünü temsil eder.

Kimlik

Kimlik matrisi oluşturur.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Identity(gain = 1.0) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)

Kısıtlamalar

Makine öğrenmesinde, optimizasyon aşamasında parametre (ağırlık) üzerinde bir kısıtlama ayarlanacaktır. <> Sınırlamalar modülü, katmanda kısıtlamayı ayarlamak için farklı işlevler sağlar. Kısıtlama fonksiyonlarından bazıları aşağıdaki gibidir.

NonNeg

Ağırlıkları negatif olmayacak şekilde sınırlar.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Identity(gain = 1.0) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init)
)

nerede, kernel_constraint katmanda kullanılacak kısıtlamayı temsil eder.

BirimNorm

Ağırlıkları birim norm olarak sınırlar.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import constraints 

my_constrain = constraints.UnitNorm(axis = 0) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_constraint = my_constrain))

MaxNorm

Ağırlığı, verilen değere eşit veya daha az normla sınırlar.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import constraints 

my_constrain = constraints.MaxNorm(max_value = 2, axis = 0) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_constraint = my_constrain))

nerede,

  • max_value üst sınırı temsil eder

  • eksen , sınırlamanın uygulanacağı boyutu temsil eder. Örneğin, Şekil (2,3,4) ekseninde 0 birinci boyutu, 1 ikinci boyutu ve 2 üçüncü boyutu belirtir

MinMaxNorm

Ağırlıkların belirtilen minimum ve maksimum değerler arasında norm olmasını sınırlar.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import constraints 

my_constrain = constraints.MinMaxNorm(min_value = 0.0, max_value = 1.0, rate = 1.0, axis = 0) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_constraint = my_constrain))

nerede, rate ağırlık sınırlamasının uygulandığı hızı temsil eder.

Düzenleyiciler

Makine öğreniminde, optimizasyon aşamasında düzenleyiciler kullanılır. Optimizasyon sırasında katman parametresine bazı cezalar uygular. Keras düzenlileştirme modülü, katmanda cezaları ayarlamak için aşağıdaki işlevleri sağlar. Düzenli hale getirme yalnızca katman bazında geçerlidir.

L1 Düzenleyici

L1 tabanlı düzenlileştirme sağlar.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import regularizers 

my_regularizer = regularizers.l1(0.) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_regularizer = my_regularizer))

nerede, kernel_regularizer ağırlık sınırlamasının uygulandığı hızı temsil eder.

L2 Düzenleyici

L2 tabanlı düzenleme sağlar.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import regularizers 

my_regularizer = regularizers.l2(0.) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_regularizer = my_regularizer))

L1 ve L2 Düzenleyici

Hem L1 hem de L2 tabanlı düzenleme sağlar.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import regularizers 

my_regularizer = regularizers.l2(0.) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,),
   kernel_regularizer = my_regularizer))

Aktivasyonlar

Makine öğreniminde aktivasyon fonksiyonu, belirli bir nöronun aktive olup olmadığını bulmak için kullanılan özel bir fonksiyondur. Temel olarak, aktivasyon işlevi, girdi verilerinin doğrusal olmayan bir dönüşümünü gerçekleştirir ve böylece nöronların daha iyi öğrenmesini sağlar. Bir nöronun çıkışı, aktivasyon işlevine bağlıdır.

Tek algılama kavramını hatırladığınız gibi, bir algılayıcının (nöron) çıktısı, basitçe, tüm girdilerin toplamının karşılık gelen ağırlığı artı varsa genel önyargı ile çarpımını kabul eden aktivasyon işlevinin sonucudur.

result = Activation(SUMOF(input * weight) + bias)

Bu nedenle, aktivasyon işlevi, modelin başarılı bir şekilde öğrenilmesinde önemli bir rol oynar. Keras, aktivasyon modülünde birçok aktivasyon işlevi sağlar. Modülde bulunan tüm aktivasyonları öğrenelim.

doğrusal

Doğrusal işlevi uygular. Hiç birşey yapmıyor.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'linear', input_shape = (784,)))

Nerede, activationkatmanın aktivasyon işlevini ifade eder. Basitçe işlevin adıyla belirtilebilir ve katman ilgili etkinleştiricileri kullanacaktır.

elu

Üstel doğrusal birimi uygular.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'elu', input_shape = (784,)))

Selu

Ölçekli üstel doğrusal birimi uygular.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'selu', input_shape = (784,)))

relu

Doğrultulmuş Doğrusal Birimi uygular.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,)))

softmax

Softmax işlevini uygular.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'softmax', input_shape = (784,)))

softplus

Softplus işlevini uygular.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'softplus', input_shape = (784,)))

Softsign

Softsign işlevini uygular.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'softsign', input_shape = (784,)))

tanh

Hiperbolik tanjant fonksiyonunu uygular.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
model = Sequential() 
model.add(Dense(512, activation = 'tanh', input_shape = (784,)))

sigmoid

Sigmoid işlevini uygular.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'sigmoid', input_shape = (784,)))

hard_sigmoid

Hard Sigmoid işlevini uygular.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'hard_sigmoid', input_shape = (784,)))

üstel

Üstel işlevi uygular.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
Sr.No Katmanlar ve Açıklama
1

Yoğun Katman

Dense layer düzenli derinlemesine bağlı sinir ağı katmanıdır.

2

Çıkarma Katmanları

Dropout makine öğrenimindeki önemli kavramlardan biridir.

3

Katmanları Düzleştir

Flatten girişi düzleştirmek için kullanılır.

4

Katmanları Yeniden Şekillendir

Reshape girişin şeklini değiştirmek için kullanılır.

5

Permute Katmanlar

Permute desen kullanarak girişin şeklini değiştirmek için de kullanılır.

6

RepeatVector Katmanları

RepeatVector girişi n kez tekrarlamak için kullanılır.

7

Lambda Katmanları

Lambda giriş verilerini bir ifade veya işlev kullanarak dönüştürmek için kullanılır.

8

Evrişim Katmanları

Keras, yaygın olarak Convolution Sinir Ağı (CNN) olarak adlandırılan Evrişim tabanlı YSA oluşturmak için birçok katman içerir .

9

Havuzlama Katmanı

Geçici veriler üzerinde maksimum havuzlama işlemi gerçekleştirmek için kullanılır.

10

Yerel olarak bağlı katman

Yerel olarak bağlı katmanlar, Conv1D katmanına benzer, ancak aradaki fark, Conv1D katman ağırlıklarının paylaşılması ancak burada ağırlıkların paylaşılmamasıdır.

11

Katmanı Birleştir

Girişlerin bir listesini birleştirmek için kullanılır.

12

Katman Gömme

Giriş katmanına gömme işlemleri gerçekleştirir.