Дополнительно
Что инициализатор по умолчанию в ТФ.слоев.conv2d и ТФ.слоев.плотная?
Официальный Tensorflow по API док утверждает, что по умолчанию параметр kernel_initializer
в none
для ТФ.слоев.conv2d
и ТФ.слоев.плотный
.
Однако, прочитав слоев туториал (https://www.tensorflow.org/tutorials/layers), я отметил, что этот параметр не задан в коде. Например:
в
# Convolutional Layer #1
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=32,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
Пример кода из учебника работает без ошибок, поэтому я думаю, что kernel_initializer по умолчанию `не
нет`. Так, что инициализатора используется?
В другой код, я не ставил kernel_initializer
из conv2d и плотные слои, и все было нормально. Однако, когда я попытался установить kernel_initializerк
ТФ.truncated_normal_initializer(со стандартным отклонением=0.1, dtype=ТФ.float32), я получил Нэн ошибки. Что здесь происходит? Может кто-нибудь помочь?
66
2
в
Отличный вопрос! Это довольно трюк, чтобы узнать!
В код:
Следующий шаг: что значит область видимости переменной делать, когда инициализатор является none?
Здесь он говорит:
Так что ответ: он использует
glorot_uniform_initializer
Для полноты определения этого инициализатора:
Редактировать: вот что я нашел в коде и документации. Возможно, вы могли бы проверить, что инициализация выглядит так, запустив ивала на весах!
По данным [курс](https://www.youtube.com/watch?v=s2coXdufOzE) Эндрю Нг и Ксавье документация, если вы используете Релу в качестве функции активации, лучше изменить стандартные грузики инициализатора(который Ксавье униформа) в Ксавье нормальный по: