Класс GlorotNormal
Класс GlorotNormal применяется для инициализации весов
слоев нейронной сети. Веса генерируются из нормального
распределения со средним 0 и стандартным отклонением,
которое вычисляется по формуле Ксавье (Glorot).
Такой подход помогает избежать затухания или взрыва
градиентов на ранних этапах обучения. Первым параметром
можно передать зерно генератора случайных чисел,
вторым - тип данных.
Синтаксис
tf.keras.initializers.GlorotNormal(seed=None, dtype=None)
Пример
Давайте создадим инициализатор и сгенерируем тензор
весов формы 3 на 3:
import tensorflow as tf
tf.random.set_seed(0)
init = tf.keras.initializers.GlorotNormal(seed=0)
t = init(shape=(3, 3))
print(t)
Результат выполнения кода:
tf.Tensor(
[[-0.4821 -0.2523 0.6824 ]
[ 0.3018 0.1096 -0.7412 ]
[-0.2411 0.5735 0.0566 ]], shape=(3, 3), dtype=float32)
Пример
Давайте применим инициализатор к полносвязному слою:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.Dense(
units=2,
kernel_initializer=tf.keras.initializers.GlorotNormal(seed=0)
)
t = tf.constant([[1.0, 2.0, 3.0]])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor([[-0.9784 0.6349]], shape=(1, 2), dtype=float32)
Пример
Давайте укажем тип данных float64 при инициализации:
<+python+>
import tensorflow as tf
tf.random.set_seed(0)
init = tf.keras.initializers.GlorotNormal(seed=0, dtype=tf.float64)
t = init(shape=(2, 2))
print(t)
<-python+>
Результат выполнения кода:
tf.Tensor(
[[-0.6422 0.3384]
[-0.1841 0.9057]], shape=(2, 2), dtype=float64)
Смотрите также
-
класс
GlorotUniform,
который инициализирует веса равномерным распределением -
класс
HeNormal,
который инициализирует веса нормальным распределением для ReLU -
класс
RandomNormal,
который инициализирует веса случайным нормальным распределением -
класс
TruncatedNormal,
который инициализирует веса усеченным нормальным распределением