在GitHub上的一种模型中,我对神经网络的工作相对较新,我注意到在将权重和偏差初始化为零后,向偏差变量添加了一个单位矩阵。
weights = tf.get_variable('weights', [256, K*K],
initializer=tf.constant_initializer(0.0),
dtype=tf.float32)
biases = tf.get_variable('biases', [K*K],
initializer=tf.constant_initializer(0.0),
dtype=tf.float32)
biases += tf.constant(np.eye(K).flatten(), dtype=tf.float32)
transform = tf.matmul(net, weights)
transform = tf.nn.bias_add(transform, biases)
此模型是否特定?这是常见的做法吗?如果是这样,将偏差初始化为单位矩阵的目的是什么?
答案 0 :(得分:0)
将所有权重初始化为零实际上不是一个好主意。如果这样做,神经网络的输出将始终为零,因为无论输入值是多少,如果将其乘以零,输出将为零。
对于神经网络,通常的做法是使用介于-1和1之间的随机噪声来初始化权重和偏差。
我个人使用Xavier initialization,其目的是使所有图层的渐变比例大致相同,从而提高收敛性。
答案 1 :(得分:0)
将权重初始化为零不是您想要的。正如fPecc所说,随机噪声是一种很好的方法,否则您可以尝试使用正态分布。