Normalisasi

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

Gambaran

Notebook ini memberikan pengantar singkat ke dalam lapisan normalisasi dari TensorFlow. Lapisan yang saat ini didukung adalah:

  • Kelompok Normalisasi (TensorFlow Addons)
  • Misalnya Normalisasi (TensorFlow Addons)
  • Lapisan Normalisasi (TensorFlow Core)

Ide dasar di balik lapisan ini adalah untuk menormalkan output dari lapisan aktivasi untuk meningkatkan konvergensi selama pelatihan. Berbeda dengan normalisasi bets normalisasi ini tidak bekerja pada batch, sebaliknya mereka menormalkan aktivasi dari sampel tunggal, membuat mereka cocok untuk jaringan neual berulang juga.

Biasanya normalisasi dilakukan dengan menghitung mean dan standar deviasi dari subgrup dalam tensor input Anda. Dimungkinkan juga untuk menerapkan skala dan faktor offset untuk ini juga.

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

\( y\) : Output

\(x\) : Masukan

\(\gamma\) : Faktor Skala

\(\mu\): mean

\(\sigma\): standar deviasi

\(\beta\): faktor Offset

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

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

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

Mempersiapkan

Instal Tensorflow 2.0 dan Tensorflow-Addons

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

Menyiapkan Kumpulan 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

Normalisasi Grup (GN) membagi saluran input Anda menjadi sub-grup yang lebih kecil dan menormalkan nilai-nilai ini berdasarkan rata-rata dan variansnya. Karena GN bekerja pada satu contoh, teknik ini tidak bergantung pada ukuran batch.

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

Contoh

Memisahkan 10 saluran setelah lapisan Conv2D menjadi 5 subkelompok dalam pengaturan standar "saluran terakhir":

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>

Tutorial Normalisasi Instance

pengantar

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

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

Contoh

Menerapkan InstanceNormalization setelah Layer Conv2D dan menggunakan skala inisialisasi yang seragam 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 [==============================] - 1s 3ms/step - loss: 0.5367 - accuracy: 0.8405
<keras.callbacks.History at 0x7f63a58d9f50>

Tutorial Normalisasi Lapisan

pengantar

Normalisasi Lapisan adalah kasus khusus normalisasi grup di mana ukuran grup adalah 1. Rata-rata dan simpangan baku dihitung dari semua aktivasi sampel tunggal.

Hasil eksperimen menunjukkan bahwa normalisasi Layer sangat cocok untuk Recurrent Neural Networks, karena ia bekerja secara independen ukuran batch.

Contoh

Menerapkan Layernormalization setelah Layer Conv2D dan menggunakan faktor skala dan 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.4056 - accuracy: 0.8754
<keras.callbacks.History at 0x7f63a5722d10>

literatur

Lapisan norma

norma contoh

Norma Kelompok