normalleştirmeler

TensorFlow.org'da görüntüleyin Google Colab'da çalıştırın Kaynağı GitHub'da görüntüleyin Not defterini indir

genel bakış

Bu defter içine kısa bir giriş verir normalleşme katmanlarının TensorFlow arasında. Şu anda desteklenen katmanlar şunlardır:

  • Grup Normalleştirme (TensorFlow Eklentileri)
  • Örnek Normalleştirme (TensorFlow eklentileri)
  • Katman Normalleştirme (TensorFlow Çekirdek)

Bu katmanların arkasındaki temel fikir, eğitim sırasında yakınsamayı iyileştirmek için bir aktivasyon katmanının çıktısını normalleştirmektir. Aksine toplu normalleştirme bu normalleştirmeler bunlar yerine tekrarlayan neual ağlar için uygundur yanı hale tek numune aktivasyonlar normalleştirmek, toplu üzerinde çalışmaya yok.

Tipik olarak normalleştirme, giriş tensörünüzdeki bir alt grubun ortalamasını ve standart sapmasını hesaplayarak gerçekleştirilir. Buna bir ölçek ve bir ofset faktörü de uygulamak mümkündür.

\(y_{i} = \frac{\gamma ( x_{i} - \mu )}{\sigma }+ \beta\)

\( y\) : Çıktı

\(x\) : Girdi

\(\gamma\) : Ölçek faktörü

\(\mu\): ortalama

\(\sigma\): standart sapma

\(\beta\): Offset faktörü

Aşağıdaki resim, bu teknikler arasındaki farkı göstermektedir. Her alt grafik, yığın ekseni olarak N, kanal ekseni olarak C ve uzamsal eksenler (örneğin bir resmin Yüksekliği ve Genişliği) olarak (H, W) olmak üzere bir giriş tensörü gösterir. Mavi renkli pikseller, bu piksellerin değerleri toplanarak hesaplanan aynı ortalama ve varyansla normalleştirilir.

Kaynak: ( https://arxiv.org/pdf/1803.08494.pdf )

Gama ve beta ağırlıkları, olası temsil yeteneği kaybını telafi etmek için tüm normalleştirme katmanlarında eğitilebilir. Sen ayarlayarak bu faktörleri aktive edebilir center veya scale bayrağı True . Tabii kullanabileceğiniz initializers , constraints ve regularizer için beta ve gamma eğitim sürecinde ayarlamak için bu değerleri.

Kurmak

Tensorflow 2.0 ve Tensorflow-Addons'u yükleyin

pip install -U tensorflow-addons
import tensorflow as tf
import tensorflow_addons as tfa

Veri Kümesi Hazırlanıyor

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

Grup Normalleştirme Eğitimi

Tanıtım

Grup Normalleştirme(GN), girdilerinizin kanallarını daha küçük alt gruplara böler ve bu değerleri ortalamalarına ve varyanslarına göre normalleştirir. GN tek bir örnek üzerinde çalıştığı için bu teknik parti büyüklüğünden bağımsızdır.

GN, görüntü sınıflandırma görevlerinde deneysel olarak toplu normalleştirmeye kapalı puan verdi. Genel batch_size değerinizin düşük olması durumunda, Batch Normalization yerine GN kullanmak faydalı olabilir, bu da toplu normalleştirmenin kötü performansına yol açar

Örnek

Conv2D katmanından sonra 10 kanalı standart bir "kanallar son" ayarında 5 alt gruba bölme:

model = tf.keras.models.Sequential([
  # Reshape into "channels last" setup.
  tf.keras.layers.Reshape((28,28,1), input_shape=(28,28)),
  tf.keras.layers.Conv2D(filters=10, kernel_size=(3,3),data_format="channels_last"),
  # Groupnorm Layer
  tfa.layers.GroupNormalization(groups=5, axis=3),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_test, y_test)
313/313 [==============================] - 3s 3ms/step - loss: 0.4707 - accuracy: 0.8613
<keras.callbacks.History at 0x7f63a5c5f490>

Örnek Normalleştirme Eğitimi

Tanıtım

Örnek Normalleştirme, grup boyutunun kanal boyutuyla (veya eksen boyutuyla) aynı boyutta olduğu özel grup normalleştirme durumudur.

Deneysel sonuçlar, örnek normalleştirmenin toplu normalleştirmeyi değiştirirken stil aktarımında iyi performans gösterdiğini göstermektedir. Son zamanlarda, GAN'larda toplu normalleştirmenin yerine örnek normalleştirme de kullanılmıştır.

Örnek

Bir Conv2D Katmanından sonra InstanceNormalization uygulama ve tek tip bir başlatılmış ölçek ve ofset faktörü kullanma.

model = tf.keras.models.Sequential([
  # Reshape into "channels last" setup.
  tf.keras.layers.Reshape((28,28,1), input_shape=(28,28)),
  tf.keras.layers.Conv2D(filters=10, kernel_size=(3,3),data_format="channels_last"),
  # LayerNorm Layer
  tfa.layers.InstanceNormalization(axis=3, 
                                   center=True, 
                                   scale=True,
                                   beta_initializer="random_uniform",
                                   gamma_initializer="random_uniform"),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_test, y_test)
313/313 [==============================] - 1s 3ms/step - loss: 0.5367 - accuracy: 0.8405
<keras.callbacks.History at 0x7f63a58d9f50>

Katman Normalleştirme Eğitimi

Tanıtım

Katman Normalizasyonu, grup boyutunun 1 olduğu özel grup normalleştirme durumudur. Ortalama ve standart sapma, tek bir örneğin tüm aktivasyonlarından hesaplanır.

Deneysel sonuçlar, toplu iş boyutundan bağımsız çalıştığı için Katman normalleştirmesinin Tekrarlayan Sinir Ağları için çok uygun olduğunu göstermektedir.

Örnek

Conv2D Katmanından sonra Layernormalization uygulama ve bir ölçek ve ofset faktörü kullanma.

model = tf.keras.models.Sequential([
  # Reshape into "channels last" setup.
  tf.keras.layers.Reshape((28,28,1), input_shape=(28,28)),
  tf.keras.layers.Conv2D(filters=10, kernel_size=(3,3),data_format="channels_last"),
  # LayerNorm Layer
  tf.keras.layers.LayerNormalization(axis=3 , center=True , scale=True),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_test, y_test)
313/313 [==============================] - 1s 3ms/step - loss: 0.4056 - accuracy: 0.8754
<keras.callbacks.History at 0x7f63a5722d10>

Edebiyat

Katman normu

Örnek normu

Grup Normu