Xem trên TensorFlow.org | Chạy trong Google Colab | Xem nguồn trên GitHub | Tải xuống sổ ghi chép |
Tổng quat
Máy tính xách tay này đưa ra một giới thiệu ngắn gọn vào lớp bình thường của TensorFlow. Các lớp hiện được hỗ trợ là:
- Nhóm Normalization (TensorFlow Addons)
- Ví dụ Normalization (TensorFlow Addons)
- Lớp Normalization (TensorFlow Core)
Ý tưởng cơ bản đằng sau các lớp này là chuẩn hóa đầu ra của một lớp kích hoạt để cải thiện sự hội tụ trong quá trình đào tạo. Ngược lại với bình thường hàng loạt những normalizations không làm việc trên lô, thay vào đó họ chuẩn hóa kích hoạt của một mẫu duy nhất, làm cho chúng phù hợp cho các mạng neual tái phát là tốt.
Thông thường, quá trình chuẩn hóa được thực hiện bằng cách tính giá trị trung bình và độ lệch chuẩn của một nhóm con trong tensor đầu vào của bạn. Cũng có thể áp dụng một thang đo và một hệ số bù đắp cho điều này.
\(y_{i} = \frac{\gamma ( x_{i} - \mu )}{\sigma }+ \beta\)
\( y\) : Output
\(x\) : Input
\(\gamma\) : yếu tố Scale
\(\mu\): trung bình
\(\sigma\): độ lệch chuẩn
\(\beta\): yếu tố offset
Hình ảnh sau đây chứng minh sự khác biệt giữa các kỹ thuật này. Mỗi ô con hiển thị một tensor đầu vào, với N là trục lô, C là trục kênh và (H, W) là trục không gian (Ví dụ: Chiều cao và Chiều rộng của hình ảnh). Các pixel màu xanh lam được chuẩn hóa theo cùng một giá trị trung bình và phương sai, được tính bằng cách tổng hợp các giá trị của các pixel này.
Nguồn: ( https://arxiv.org/pdf/1803.08494.pdf )
Trọng số gamma và beta có thể đào tạo được trong tất cả các lớp chuẩn hóa để bù đắp cho khả năng biểu diễn bị mất. Bạn có thể kích hoạt những yếu tố này bằng cách thiết lập các center
hoặc scale
cờ True
. Tất nhiên bạn có thể sử dụng initializers
, constraints
và regularizer
cho beta
và gamma
để điều chỉnh các giá trị trong quá trình đào tạo.
Thành lập
Cài đặt Tensorflow 2.0 và Tensorflow-Addons
pip install -U tensorflow-addons
import tensorflow as tf
import tensorflow_addons as tfa
Chuẩn bị tập dữ liệu
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
Hướng dẫn chuẩn hóa nhóm
Giới thiệu
Chuẩn hóa nhóm (GN) chia các kênh đầu vào của bạn thành các nhóm phụ nhỏ hơn và chuẩn hóa các giá trị này dựa trên giá trị trung bình và phương sai của chúng. Vì GN hoạt động trên một ví dụ duy nhất nên kỹ thuật này độc lập với kích thước hàng loạt.
GN đã chấm điểm theo thực nghiệm để chuẩn hóa hàng loạt trong các tác vụ phân loại hình ảnh. Có thể có lợi khi sử dụng GN thay vì Chuẩn hóa hàng loạt trong trường hợp kích thước tổng thể theo lô của bạn thấp, điều này sẽ dẫn đến hiệu suất kém của chuẩn hóa hàng loạt
Thí dụ
Tách 10 kênh sau lớp Conv2D thành 5 nhóm con trong cài đặt "kênh cuối cùng" tiêu chuẩn:
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>
Hướng dẫn chuẩn hóa phiên bản
Giới thiệu
Chuẩn hóa phiên bản là trường hợp đặc biệt của chuẩn hóa nhóm trong đó kích thước nhóm có cùng kích thước với kích thước kênh (hoặc kích thước trục).
Kết quả thử nghiệm cho thấy rằng chuẩn hóa phiên bản hoạt động tốt khi chuyển kiểu khi thay thế chuẩn hóa hàng loạt. Gần đây, chuẩn hóa phiên bản cũng đã được sử dụng để thay thế cho quá trình chuẩn hóa hàng loạt trong GAN.
Thí dụ
Áp dụng InstanceNormalization sau Lớp Conv2D và sử dụng hệ số bù và thang đo được khởi tạo thống nhất.
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>
Hướng dẫn chuẩn hóa lớp
Giới thiệu
Chuẩn hóa lớp là trường hợp đặc biệt của chuẩn hóa nhóm trong đó kích thước nhóm là 1. Giá trị trung bình và độ lệch chuẩn được tính toán từ tất cả các lần kích hoạt của một mẫu đơn lẻ.
Kết quả thử nghiệm cho thấy rằng chuẩn hóa Lớp rất phù hợp với Mạng thần kinh tái tạo, vì nó hoạt động độc lập với quy mô hàng loạt.
Thí dụ
Áp dụng Chuẩn hóa lớp sau Lớp Conv2D và sử dụng hệ số tỷ lệ và độ lệch.
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>