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>