عرض على TensorFlow.org | تشغيل في Google Colab | عرض المصدر على جيثب | تحميل دفتر |
ملخص
هذا الكمبيوتر الدفتري يعطي مقدمة موجزة في طبقات التطبيع من TensorFlow. الطبقات المدعومة حاليًا هي:
- المجموعة التطبيع (TensorFlow إضافات)
- المثال التطبيع (TensorFlow إضافات)
- طبقة التطبيع (TensorFlow الأساسية)
الفكرة الأساسية وراء هذه الطبقات هي تطبيع إخراج طبقة التنشيط لتحسين التقارب أثناء التدريب. وعلى النقيض من التطبيع دفعة هذه التطبيع لا تعمل على دفعات، وبدلا من ذلك تطبيع التنشيط من عينة واحدة، مما يجعلها مناسبة للشبكات 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
دروس تطبيع المجموعة
مقدمة
تقسم تسوية المجموعة (GN) قنوات مدخلاتك إلى مجموعات فرعية أصغر وتطبيع هذه القيم بناءً على متوسطها وتباينها. نظرًا لأن GN يعمل على مثال واحد ، فإن هذه التقنية مستقلة عن حجم الدُفعات.
سجل GN بشكل تجريبي مغلقًا لتطبيع الدُفعات في مهام تصنيف الصور. قد يكون من المفيد استخدام GN بدلاً من تطبيع الدُفعات في حالة انخفاض حجم الدُفعات الإجمالي لديك ، مما قد يؤدي إلى أداء سيئ لتطبيع الدُفعات
مثال
تقسيم 10 قنوات بعد طبقة Conv2D إلى 5 مجموعات فرعية في إعداد قياسي "للقنوات الأخيرة":
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>