Google I / O'daki önemli notları, ürün oturumlarını, atölyeleri ve daha fazlasını izleyin Oynatma listesine bakın

Normalleştirmeler

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

Genel Bakış

Bu defter, TensorFlow'un normalleştirme katmanlarına kısa bir giriş sağlar. Şu anda desteklenen katmanlar şunlardır:

  • Grup Normalleştirme (TensorFlow Eklentileri)
  • Örnek Normalleştirme (TensorFlow Eklentileri)
  • Katman Normalleştirme (TensorFlow Çekirdeği)

Bu katmanların arkasındaki temel fikir, eğitim sırasında yakınsamayı iyileştirmek için bir etkinleştirme katmanının çıktısını normalleştirmektir. Parti normalleştirmesinin aksine, bu normalleştirmeler gruplar üzerinde çalışmaz, bunun yerine tek bir numunenin aktivasyonlarını normalleştirerek, onları tekrarlayan nöral ağlar için de uygun hale getirir.

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 ofset faktörü de uygulamak mümkündür.

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

$ y $: Çıktı

$ x $: Giriş

$ \ gamma $: Ölçek faktörü

$ \ mu $: ortalama

$ \ sigma $: standart sapma

$ \ beta $: Göreli konum faktörü

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

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

Gama ve beta ağırlıkları, olası temsil kabiliyetindeki kayıpları telafi etmek için tüm normalleştirme katmanlarında eğitilebilir. center veya scale bayrağını True ayarlayarak bu faktörleri etkinleştirebilirsiniz. Elbette, eğitim sürecinde bu değerleri ayarlamak için beta ve gamma için initializers , constraints ve regularizer kullanabilirsiniz.

Kurulum

Tensorflow 2.0 ve Tensorflow-Addons'ı yükleyin

pip install -q -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

Giriş

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ığından, bu teknik parti boyutundan bağımsızdır.

GN, görüntü sınıflandırma görevlerinde deneysel olarak toplu normalizasyona kapalı olarak puanlandı. Genel batch_size değerinizin düşük olması durumunda Toplu Normalleştirme yerine GN kullanmak faydalı olabilir, bu da toplu normalleştirme performansının kötü olmasına yol açar.

Misal

Bir Conv2D katmanından sonra 10 kanalı, standart "son kanallar" ayarında 5 alt gruba ayırma:

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 [==============================] - 4s 3ms/step - loss: 0.7835 - accuracy: 0.7722
<tensorflow.python.keras.callbacks.History at 0x7f94db65ca58>

Örnek Normalleştirme Eğiticisi

Giriş

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

Deneysel sonuçlar, parti normalizasyonu değiştirilirken örnek normalizasyonunun stil aktarımında iyi performans gösterdiğini göstermektedir. Son zamanlarda, GAN'larda parti normalizasyonu yerine örnek normalizasyonu da kullanılmıştır.

Misal

Bir Conv2D Katmanından sonra Örnek Normalleştirme uygulama ve tek tip başlatılmış ölçek ve kaydırma 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 [==============================] - 2s 3ms/step - loss: 0.9159 - accuracy: 0.7194
<tensorflow.python.keras.callbacks.History at 0x7f9549c37278>

Katman Normalleştirme Eğitimi

Giriş

Katman Normalizasyonu, grup boyutunun 1 olduğu özel grup normalizasyonu durumudur. Ortalama ve standart sapma, tek bir numunenin tüm aktivasyonlarından hesaplanır.

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

Misal

Bir 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.6272 - accuracy: 0.8049
<tensorflow.python.keras.callbacks.History at 0x7f9549b0a748>

Edebiyat

Katman normu

Örnek norm

Grup Normu

Tam Normalleştirmelere Genel Bakış