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. |