לשמור את התאריך! קלט / פלט של Google חוזר 18-20 במאי הירשם עכשיו
דף זה תורגם על ידי Cloud Translation API.
Switch to English

נורמליזציות

צפה ב- TensorFlow.org הפעל בגוגל קולאב צפה במקור ב- GitHub הורד מחברת

סקירה כללית

מחברת זו נותנת הקדמה קצרה לשכבות הנורמליזציה של TensorFlow. השכבות הנתמכות כרגע הן:

  • נורמליזציה קבוצתית (תוספות TensorFlow)
  • נורמליזציה למופע (תוספות TensorFlow)
  • נורמליזציה של שכבה (TensorFlow Core)

הרעיון הבסיסי מאחורי שכבות אלה הוא לנרמל את התפוקה של שכבת הפעלה כדי לשפר את ההתכנסות במהלך האימון. בניגוד לנורמליזציה של אצווה נורמליזציות אלה אינן עובדות על קבוצות, אלא מנרמל את ההפעלות של דגימה אחת, מה שהופך אותן למתאימות גם לרשתות חד-פעמיות חוזרות.

בדרך כלל הנורמליזציה מתבצעת על ידי חישוב הממוצע וסטיית התקן של תת-קבוצה במתח הקלט שלך. אפשר גם להחיל על זה קנה מידה וגורם קיזוז.

$ 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 -q -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 לחמש קבוצות משנה בהגדרת "ערוצים אחרונים" סטנדרטיים:

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 [==============================] - 4s 3ms/step - loss: 0.7835 - accuracy: 0.7722

<tensorflow.python.keras.callbacks.History at 0x7f94db65ca58>

מדריך לנורמליזציה למופע

מבוא

נורמליזציה של המקרים היא מקרה מיוחד של נורמליזציה קבוצתית כאשר גודל הקבוצה זהה לגודל הערוץ (או לגודל הציר).

תוצאות ניסוי מראות כי נורמליזציה של מופע מופיעה היטב בהעברת סגנון בעת ​​החלפת נורמליזציה של אצווה. לאחרונה, נורמליזציה של מופע שימשה גם כתחליף לנורמליזציה של אצווה ב- 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 [==============================] - 2s 3ms/step - loss: 0.9159 - accuracy: 0.7194

<tensorflow.python.keras.callbacks.History at 0x7f9549c37278>

מדריך לנורמליזציה של שכבות

מבוא

נורמליזציה של שכבה היא מקרה מיוחד של נורמליזציה קבוצתית כאשר גודל הקבוצה הוא 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.6272 - accuracy: 0.8049

<tensorflow.python.keras.callbacks.History at 0x7f9549b0a748>

סִפְרוּת

נורמה שכבתית

נורמת המופע

נורמה קבוצתית

סקירת נורמליזציות מלאה