将权重初始化为Tensorflow NN模型中的单位矩阵

时间:2018-10-29 12:24:51

标签: python tensorflow neural-network

在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)

此模型是否特定?这是常见的做法吗?如果是这样,将偏差初始化为单位矩阵的目的是什么?

链接到仓库:Here 链接到论文:Here

2 个答案:

答案 0 :(得分:0)

将所有权重初始化为零实际上不是一个好主意。如果这样做,神经网络的输出将始终为零,因为无论输入值是多少,如果将其乘以零,输出将为零。

对于神经网络,通常的做法是使用介于-1和1之间的随机噪声来初始化权重和偏差。

我个人使用Xavier initialization,其目的是使所有图层的渐变比例大致相同,从而提高收敛性。

答案 1 :(得分:0)

将权重初始化为零不是您想要的。正如fPecc所说,随机噪声是一种很好的方法,否则您可以尝试使用正态分布。