如果我想对Epsilon提出一个价值,对我的所有初始化权重,那么如何处理此问题的最佳方法?通常,我不定义初始化器,这会导致tensorflow默认为glorot_unibrot_initializer(((来源:https://www.tensorflow.org/api_docs/python/tpython/tf/glorot_initialializerizerizer(
(我希望它们以零左为中心的统一方式初始化,而是希望它们以某些epsilon为中心。该epsilon值将取决于初始权重矩阵中的值数量。
您是否建议我只是更改glorot_uniform_initializer中的"种子"参数?还是有更好的方法可以做到这一点?
seed
参数是随机种子,这不会帮助您。
我建议一旦您运行sess.run( tf.global_variables_initializer() )
或类似,也就是说, 初始化的权重,获取指向所讨论层的重量张量的指针,然后使用tf.assign_add()
修改重量值通过常数Ε 。
您可以使用自定义的初始化器:
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))
您可以使用random_uniform_initializer
并根据您的需求进行自定义。您只需要提供所需的minval
和maxval
即可。如果要将其设置为使用与Glorot统一初始化器以及小epsilon
相同的范围,则只需将Minval和Maxval设置为epsilon+-sqrt(6 / (fan_in + fan_out))
即可。有关详细信息,请参见文档。