Как добавить константу ко всем инициализированным весам тензора в Tensorflow? - PullRequest
0 голосов
/ 27 апреля 2018

Если бы я хотел получить значение, скажем, epsilon, для всех моих инициализированных весов, как может быть лучший способ приблизиться к этому? Обычно я не определяю инициализатор, который заставляет Tensorflow установить значение по умолчанию для glorot_uniform_initializer () (Источник: https://www.tensorflow.org/api_docs/python/tf/glorot_uniform_initializer)

Вместо того, чтобы мои значения инициализировались равномерно с центром вокруг нуля, я хочу, чтобы они были сосредоточены вокруг некоторого эпсилона. Это значение эпсилона будет зависеть от количества значений в исходной весовой матрице.

Вы предлагаете мне просто изменить параметр "seed" в glorot_uniform_initializer? Или может быть лучший способ сделать это?

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Вы можете использовать настроенный инициализатор:

def add_constant_initializer(base_initializer, epsilon):
    return lambda *a, **kw: base_initializer(*a, **kw) + epsilon
tf.get_variable(
    'MyVar', shape=(...), dtype=...,
    initializer=add_constant_initializer(tf.glorot_uniform_initializer(), epsilon))
0 голосов
/ 27 апреля 2018

Вы можете использовать random_uniform_initializer и настроить его под свои нужды. Вам просто нужно предоставить ему minval и maxval, которые вы хотите. Если вы хотите настроить его на использование того же диапазона, что и для унифицированного инициатора glorot, плюс небольшого значения epsilon, просто установите для minval и maxval значение epsilon+-sqrt(6 / (fan_in + fan_out)). См. документацию для подробностей.

0 голосов
/ 27 апреля 2018

Параметр seed - это случайное начальное число, которое вам не поможет.

Я бы предложил, как только вы запустите sess.run( tf.global_variables_initializer() ) или аналогичный, то есть после , когда веса инициализированы, получите указатель на тензор веса рассматриваемого слоя и используйте tf.assign_add() для изменения значений веса на константу & epsilon; .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...