Ответ 1
Отличный вопрос! Это довольно трюк, чтобы узнать!
- Как вы можете видеть, это не описано в
tf.layers.conv2d
- Если вы посмотрите на определение функции, вы увидите, что функция вызывает
variable_scope.get_variable
:
В коде:
self.kernel = vs.get_variable('kernel',
shape=kernel_shape,
initializer=self.kernel_initializer,
regularizer=self.kernel_regularizer,
trainable=True,
dtype=self.dtype)
Следующий шаг: что делает область переменной, когда инициализатором является None?
Здесь говорится:
Если инициализатор равен
None
(по умолчанию), инициализатор по умолчанию прошел в используется конструктор. Если этотNone
тоже, мы используем новыйglorot_uniform_initializer
.
Итак, ответ таков: он использует glorot_uniform_initializer
Для полноты определения этого инициализатора:
Единый инициализатор Glorot, также называемый равномерным инициализатором Xavier. Он рисует выборки из равномерного распределения в пределах [-лимит, предел] где
limit
sqrt(6 / (fan_in + fan_out))
гдеfan_in
- количество входных единиц в тензоре веса иfan_out
- количество выходных единиц в весовом тензоре. Ссылка: http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
Изменить: это то, что я нашел в коде и документации. Возможно, вы можете убедиться, что инициализация выглядит так: запустив eval на весах!