在设置神经网络或使用梯度下降的任何数值优化系统时,必须为权重(或任何要调用的系统参数)提供初始值。
一种策略是将它们初始化为随机值(将随机数种子设置为已知值,更改为不同的起始点)。但这并不总是令人满意的(例如,现在我正在比较单精度和双精度的精度,TensorFlow随机数发生器在每种情况下输出不同的值)。所以我说的是初始值是非随机的情况。
必须提供一些初始值。在没有任何指定值的信息的情况下,它应该是什么?最明显的值是0.0和1.0。是否有理由偏好其中一个而不是另一个?或者是否存在某些因某些原因而倾向于优先的其他价值?
答案 0 :(得分:0)
正如sascha观察到的那样,恒定的初始权重无论如何都不是解决方案,因为你必须打破对称性。针对我遇到问题的特定环境的更好解决方案:随机数生成器,无论类型如何都提供相同的序列。
dtype = np.float64
# Random number generator that returns the correct type
# and returns the same sequence regardless of type
def rnd(shape=(), **kwargs):
if type(shape) == int or type(shape) == float:
shape = shape,
x = tf.random_normal(shape, **kwargs, dtype=np.float64)
if dtype == np.float32:
x = tf.to_float(x)
return x.eval()