Класс GlorotUniform
Класс GlorotUniform создает инициализатор
для весов нейронной сети. Он заполняет тензор
случайными значениями из равномерного
распределения в диапазоне
[-limit, limit], где
limit = sqrt(6 / (fan_in + fan_out)).
Такой подход также называют инициализацией
Ксавье (Xavier). Первым параметром можно
передать зерно генератора случайных чисел
seed для воспроизводимости результата.
Синтаксис
tf.keras.initializers.GlorotUniform(seed=None)
Пример
Давайте создадим инициализатор и применим
его к тензору формы (3, 3):
import tensorflow as tf
tf.random.set_seed(0)
initializer = tf.keras.initializers.GlorotUniform(seed=0)
t = initializer(shape=(3, 3))
print(t)
Результат выполнения кода:
tf.Tensor(
[[-0.40824828 0.40824828 0.40824828]
[-0.40824828 -0.40824828 0.40824828]
[ 0.40824828 0.40824828 -0.40824828]], shape=(3, 3), dtype=float32)
Пример
Давайте применим инициализатор
GlorotUniform к слою
Dense и выведем полученные веса:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.Dense(
units=2,
kernel_initializer=tf.keras.initializers.GlorotUniform(seed=0)
)
t = tf.constant([[1.0, 2.0, 3.0]])
res = layer(t)
print(layer.kernel)
Результат выполнения кода:
tf.Tensor(
[[-0.40824828 0.40824828]
[-0.40824828 -0.40824828]
[ 0.40824828 0.40824828]], shape=(3, 2), dtype=float32)
Пример
Давайте создадим инициализатор без зерна и получим его конфигурацию:
import tensorflow as tf
initializer = tf.keras.initializers.GlorotUniform()
res = initializer.get_config()
print(res)
Результат выполнения кода:
{'seed': None}
Смотрите также
-
класс
GlorotNormal,
который инициализирует веса по нормальному распределению -
класс
HeUniform,
который инициализирует веса для слоев с ReLU -
класс
RandomUniform,
который заполняет тензор равномерным распределением -
класс
Orthogonal,
который создает ортогональную матрицу весов