सामान्यीकरण

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\): ऑफसेट कारक

निम्नलिखित छवि इन तकनीकों के बीच के अंतर को दर्शाती है। प्रत्येक सबप्लॉट एक इनपुट टेंसर दिखाता है, जिसमें एन बैच अक्ष के रूप में, सी चैनल अक्ष के रूप में, और (एच, डब्ल्यू) स्थानिक अक्ष के रूप में (उदाहरण के लिए एक तस्वीर की ऊंचाई और चौड़ाई)। नीले रंग में पिक्सेल समान माध्य और विचरण द्वारा सामान्यीकृत होते हैं, जिनकी गणना इन पिक्सेल के मानों को एकत्रित करके की जाती है।

स्रोत: ( 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

समूह सामान्यीकरण ट्यूटोरियल

परिचय

समूह सामान्यीकरण (जीएन) आपके इनपुट के चैनलों को छोटे उप समूहों में विभाजित करता है और इन मूल्यों को उनके माध्य और विचरण के आधार पर सामान्य करता है। चूंकि जीएन एक ही उदाहरण पर काम करता है, इसलिए यह तकनीक बैचसाइज स्वतंत्र है।

जीएन ने प्रयोगात्मक रूप से छवि वर्गीकरण कार्यों में बैच सामान्यीकरण के लिए बंद किया। यदि आपका समग्र बैच_साइज़ कम है, तो बैच सामान्यीकरण के बजाय जीएन का उपयोग करना फायदेमंद हो सकता है, जिससे बैच सामान्यीकरण का खराब प्रदर्शन होगा

उदाहरण

एक मानक "चैनल अंतिम" सेटिंग में एक Conv2D परत के बाद 5 उपसमूहों में 10 चैनलों को विभाजित करना:

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 में बैच सामान्यीकरण के प्रतिस्थापन के रूप में भी किया गया है।

उदाहरण

Conv2D परत के बाद InstanceNormalization लागू करना और एक समान प्रारंभिक स्केल और ऑफ़सेट कारक का उपयोग करना।

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 है। माध्य और मानक विचलन की गणना एकल नमूने के सभी सक्रियणों से की जाती है।

प्रायोगिक परिणाम बताते हैं कि परत सामान्यीकरण आवर्तक तंत्रिका नेटवर्क के लिए अच्छी तरह से अनुकूल है, क्योंकि यह स्वतंत्र रूप से बैच आकार में काम करता है।

उदाहरण

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>

साहित्य

परत मानदंड

उदाहरण मानदंड

ग्रुप नॉर्म