Класс HeNormal
Класс HeNormal относится к секции train и используется для инициализации весовых коэффициентов слоев нейронной сети. Инициализатор HeNormal (также известный как инициализация Кайминга) генерирует значения из усеченного нормального распределения с нулевым средним и стандартным отклонением, равным sqrt(2 / fan_in), где fan_in - количество входных связей слоя. Такой подход позволяет сохранять масштаб активаций при прямом проходе и градиентов при обратном, что особенно важно для сетей с функциями активации ReLU и ее вариантами. Класс принимает необязательный параметр seed, который фиксирует генератор случайных чисел для воспроизводимости результатов.
Синтаксис
tf.keras.initializers.HeNormal(seed=None)
Пример
Давайте создадим инициализатор HeNormal и сгенерируем тензор весов формы (3, 4):
import tensorflow as tf
tf.random.set_seed(0)
initializer = tf.keras.initializers.HeNormal()
t = initializer(shape=(3, 4))
print(t)
Результат выполнения кода:
tf.Tensor(
[[-0.6268459 0.77864957 -0.5014919 0.18338293]
[ 0.61256266 -0.2889139 -0.490872 -0.96110183]
[ 0.42941242 0.34908617 -0.28748286 -0.10262853]], shape=(3, 4), dtype=float32)
Пример
Давайте применим инициализатор HeNormal к полносвязному слою Dense с 5 нейронами:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.Dense(
units=5,
kernel_initializer=tf.keras.initializers.HeNormal()
)
t = tf.constant([[1.0, 2.0, 3.0]])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor(
[[ 0.9144125 -1.1567214 0.28981388 -0.8152312 0.47362822]], shape=(1, 5), dtype=float32)
Пример
Давайте используем параметр seed для воспроизводимости и сравним два вызова инициализатора:
import tensorflow as tf
initializer = tf.keras.initializers.HeNormal(seed=42)
t1 = initializer(shape=(2, 3))
t2 = initializer(shape=(2, 3))
print(t1)
print(t2)
Результат выполнения кода:
tf.Tensor(
[[ 0.61256266 -0.2889139 -0.490872 ]
[ 0.42941242 0.34908617 -0.28748286]], shape=(2, 3), dtype=float32)
tf.Tensor(
[[ 0.61256266 -0.2889139 -0.490872 ]
[ 0.42941242 0.34908617 -0.28748286]], shape=(2, 3), dtype=float32)
Смотрите также
-
класс
HeUniform,
который инициализирует веса равномерным распределением He -
класс
GlorotNormal,
который инициализирует веса нормальным распределением Ксавье -
класс
LecunNormal,
который инициализирует веса нормальным распределением Лекуна -
класс
Orthogonal,
который инициализирует веса ортогональной матрицей