如何在TensorFlow中的张量的所有初始化重量添加常数



如果我想对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并根据您的需求进行自定义。您只需要提供所需的minvalmaxval即可。如果要将其设置为使用与Glorot统一初始化器以及小epsilon相同的范围,则只需将Minval和Maxval设置为epsilon+-sqrt(6 / (fan_in + fan_out))即可。有关详细信息,请参见文档。

最新更新