مشاهده در TensorFlow.org | در Google Colab اجرا شود | مشاهده منبع در GitHub | دانلود دفترچه یادداشت |
بررسی اجمالی
این نوت بوک می دهد یک مقدمه کوتاه به لایه های عادی از TensorFlow. لایه های پشتیبانی شده در حال حاضر عبارتند از:
- گروه عادی (TensorFlow افزونه)
- به عنوان مثال عادی (TensorFlow افزونه)
- لایه عادی (TensorFlow هسته)
ایده اصلی پشت این لایه ها عادی سازی خروجی یک لایه فعال سازی برای بهبود همگرایی در طول آموزش است. در مقابل به عادی دسته ای این normalizations کار نمی در دسته، به جای آنها عادی فعال از تنها یک نمونه، آنها را برای شبکه های neual عود مناسب است.
به طور معمول نرمال سازی با محاسبه میانگین و انحراف استاندارد یک زیر گروه در تانسور ورودی شما انجام می شود. همچنین می توان مقیاس و فاکتور افست را نیز برای این کار اعمال کرد.
\(y_{i} = \frac{\gamma ( x_{i} - \mu )}{\sigma }+ \beta\)
\( y\) : خروجی
\(x\) : ورودی
\(\gamma\) : فاکتور مقیاس
\(\mu\): متوسط
\(\sigma\): انحراف استاندارد
\(\beta\): عامل افست
تصویر زیر تفاوت بین این تکنیک ها را نشان می دهد. هر طرح فرعی یک تانسور ورودی را نشان می دهد که N به عنوان محور دسته ای، C به عنوان محور کانال، و (H، W) به عنوان محورهای فضایی (به عنوان مثال ارتفاع و عرض یک تصویر). پیکسلهای آبی با میانگین و واریانس یکسان نرمالسازی میشوند که با تجمیع مقادیر این پیکسلها محاسبه میشود.
منبع: ( https://arxiv.org/pdf/1803.08494.pdf )
وزنهای گاما و بتا در تمام لایههای نرمالسازی قابل آموزش هستند تا فقدان توانایی نمایشی احتمالی را جبران کنند. شما می توانید این عوامل با تنظیم فعال شدن center
یا scale
پرچم را به True
. البته شما می توانید با استفاده از initializers
، constraints
و regularizer
برای beta
و gamma
به لحن این ارزش ها در طول فرایند آموزش است.
برپایی
Tensorflow 2.0 و Tensorflow-Addons را نصب کنید
pip install -U tensorflow-addons
import tensorflow as tf
import tensorflow_addons as tfa
آماده سازی مجموعه داده
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
آموزش عادی سازی گروه
معرفی
گروه Normalization (GN) کانال های ورودی شما را به زیر گروه های کوچکتر تقسیم می کند و این مقادیر را بر اساس میانگین و واریانس آنها عادی می کند. از آنجایی که GN روی یک نمونه کار می کند، این تکنیک مستقل از اندازه دسته ای است.
GN به طور تجربی در وظایف طبقهبندی تصویر، به نرمالسازی دستهای بسته نمره داد. در صورتی که batch_size کلی شما کم باشد، استفاده از GN به جای Batch Normalization می تواند مفید باشد، که منجر به عملکرد بد نرمال سازی دسته ای می شود.
مثال
تقسیم 10 کانال پس از یک لایه Conv2D به 5 زیر گروه در یک تنظیم استاندارد "channels last":
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>
آموزش عادی سازی نمونه
معرفی
نرمال سازی نمونه مورد خاصی از نرمال سازی گروه است که در آن اندازه گروه به اندازه اندازه کانال (یا اندازه محور) است.
نتایج تجربی نشان میدهد که نرمالسازی نمونه به خوبی در انتقال سبک هنگام جایگزینی نرمالسازی دستهای عمل میکند. اخیراً عادی سازی نمونه نیز به عنوان جایگزینی برای عادی سازی دسته ای در GAN ها استفاده شده است.
مثال
استفاده از InstanceNormalization بعد از یک لایه Conv2D و با استفاده از یک مقیاس اولیه یکنواخت و ضریب افست.
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>
آموزش نرمال سازی لایه ها
معرفی
نرمال سازی لایه حالت خاصی از نرمال سازی گروه است که در آن اندازه گروه 1 است. میانگین و انحراف استاندارد از تمام فعال سازی های یک نمونه واحد محاسبه می شود.
نتایج تجربی نشان میدهد که نرمالسازی لایه برای شبکههای عصبی مکرر مناسب است، زیرا به صورت دستهای مستقل کار میکند.
مثال
استفاده از Layernormalization بعد از لایه Conv2D و با استفاده از ضریب مقیاس و افست.
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>