Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Normalisasi

Lihat di TensorFlow.org Jalankan di Google Colab Lihat sumber di GitHub Unduh buku catatan

Gambaran

Notebook ini memberikan pengantar singkat tentang lapisan normalisasi TensorFlow. Lapisan yang didukung saat ini adalah:

  • Normalisasi Grup (Addons TensorFlow)
  • Normalisasi Instance (Addons TensorFlow)
  • Normalisasi Lapisan (Inti TensorFlow)

Ide dasar di balik lapisan ini adalah untuk menormalkan keluaran dari lapisan aktivasi untuk meningkatkan konvergensi selama pelatihan. Berbeda dengan normalisasi batch, normalisasi ini tidak berfungsi pada batch, melainkan menormalkan aktivasi sampel tunggal, membuatnya cocok untuk jaringan neual berulang juga.

Biasanya normalisasi dilakukan dengan menghitung mean dan deviasi standar subkelompok di tensor input Anda. Juga dimungkinkan untuk menerapkan skala dan faktor offset untuk ini juga.

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

$ y $: Keluaran

$ x $: Masukan

$ \ gamma $: Faktor skala

$ \ mu $: berarti

$ \ sigma $: deviasi standar

$ \ beta $: Faktor offset

Gambar berikut menunjukkan perbedaan antara teknik-teknik ini. Setiap subplot menampilkan tensor input, dengan N sebagai sumbu batch, C sebagai sumbu saluran, dan (H, W) sebagai sumbu spasial (misalnya, Tinggi dan Lebar gambar). Piksel berwarna biru dinormalisasi dengan mean dan varians yang sama, dihitung dengan menggabungkan nilai piksel ini.

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

Bobot gamma dan beta dapat dilatih di semua lapisan normalisasi untuk mengkompensasi kemungkinan hilangnya kemampuan representasi. Anda dapat mengaktifkan faktor-faktor ini dengan menyetel center atau bendera scale ke True . Tentu saja Anda dapat menggunakan initializers , constraints , dan regularizer untuk beta dan gamma untuk menyesuaikan nilai ini selama proses pelatihan.

Mendirikan

Instal Tensorflow 2.0 dan Tensorflow-Addons

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

Mempersiapkan Set Data

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

Tutorial Normalisasi Grup

pengantar

Group Normalization (GN) membagi saluran input Anda menjadi sub-kelompok yang lebih kecil dan menormalkan nilai-nilai ini berdasarkan mean dan variansnya. Karena GN bekerja pada satu contoh, teknik ini independen ukuran batch.

GN secara eksperimental mencetak skor mendekati normalisasi batch dalam tugas klasifikasi gambar. Akan bermanfaat untuk menggunakan GN daripada Normalisasi Batch jika keseluruhan batch_size Anda rendah, yang akan mengakibatkan kinerja normalisasi batch yang buruk

Contoh

Memisahkan 10 saluran setelah lapisan Konv2D menjadi 5 subkelompok dalam setelan "saluran terakhir" standar:

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>

Tutorial Normalisasi Instance

pengantar

Normalisasi Instance adalah kasus khusus dari normalisasi grup di mana ukuran grup adalah ukuran yang sama dengan ukuran saluran (atau ukuran sumbu).

Hasil eksperimen menunjukkan bahwa normalisasi instance bekerja dengan baik pada transfer gaya saat mengganti normalisasi batch. Baru-baru ini, normalisasi instance juga telah digunakan sebagai pengganti normalisasi batch di GAN.

Contoh

Menerapkan InstanceNormalization setelah Conv2D Layer dan menggunakan skala yang diinisialisasi dan faktor offset.

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>

Tutorial Normalisasi Lapisan

pengantar

Normalisasi Lapisan adalah kasus khusus dari normalisasi kelompok dimana ukuran kelompok adalah 1. Rata-rata dan deviasi standar dihitung dari semua aktivasi sampel tunggal.

Hasil eksperimen menunjukkan bahwa Normalisasi lapisan cocok untuk Jaringan Neural Rekuren, karena berfungsi secara terpisah dengan ukuran batch.

Contoh

Menerapkan Layernormalization setelah Lapisan Konv2D dan menggunakan skala dan faktor offset.

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>

literatur

Norma lapisan

Norma instans

Norma Kelompok

Ikhtisar Normalisasi Lengkap