随机初始化权重0训练后会发生什么?

时间:2017-06-19 11:50:29

标签: python tensorflow deep-learning

我在MNIST上训练我的网络。在一些时代之后,它学得很好。我在Tensorflow Tuto中使用初始化:

def weight_variable(shape):
  initial = tf.truncated_normal(shape, stddev=0.1)
  return tf.Variable(initial)

def bias_variable(shape):
  initial = tf.constant(0.1, shape=shape)
  return tf.Variable(initial)

而且,当我不训练时,我最终总是使用相同的预测(使用softmax):

[[0, 0, 0, 0, 1, 0, 0, 0, 0, 0]]

我显然不希望它能够很好地分类。

但我期待随机预测并不总是相同的预测。

预计会出现这种情况吗?

谢谢

1 个答案:

答案 0 :(得分:2)

如果您使用的是已经使用未经过训练的随机权重进行初始化的张量流图,则结果很可能都是一个类。

让我们用XOR探讨这个:2个输入,3个隐藏单位,1个输出就像这样

W1_shape = [2,3] # in the range [-.1,.1]
b1_shape = [3]   # initialized to .1

W2_shape = [3,1] # in the range [-.1,.1]
b2_shape = [1]   # initialized to .1

示例值

W1 [[-0.06278145 -0.01198458  0.12907881]
 [ 0.04213665  0.03700039 -0.05857842]]

b1 0.1

W2 [[ 0.14718919]
 [ 0.08633115]
 [ 0.10883235]]

b2 0.1

这导致XOR始终报告略微 TRUE。

在初始化运行10次后,结果始终相同,对于所有XOR情况,略微为TRUE。

但是,如果我将 b1 b2 更改为0.001,则输出全部 TRUE或略< / em> FALSE,但对于特定的初始化没有混合。看一下权重,很明显一些权重会压倒整个图表。只需几次训练迭代即可快速将这些权重排成一行。