Tensorflow在隐藏层中返回相​​同的权重

时间:2018-11-04 08:10:44

标签: python tensorflow

我正在尝试训练一个模拟正弦函数的模型。 使用带有1-15-1个神经元的3个完全连接的层。所以我有2个权重变量1x15和15x1。训练后,它们具有相同的值:

[[0.02432664] [0.02432664] [0.02432664] [0.02432664] [0.02432664] 
[0.02432664] [0.02432664] [0.02432664] [0.02432664] [0.02432664] 
[0.02432664] [0.02432664] [0.02432665] [0.02432665] [0.02432665]]

[[0.02432664 0.02432664 0.02432664 0.02432664 0.02432664 0.02432664
  0.02432664 0.02432664 0.02432664 0.02432664 0.02432664 0.02432664
  0.02432665 0.02432665 0.02432665]]

这是我的代码:

W1 = tf.Variable(tf.ones([15, 1]) * 0.3)
W2 = tf.Variable(tf.ones([1, 15]) * 0.3)
label = tf.placeholder(dtype=tf.float32, shape=[1, None])
result = tf.placeholder(dtype=tf.float32)

l1 = tf.matmul(W1, label)
l2 = tf.matmul(W2, l1)
loss = tf.square(l2 - result)
loss = tf.reduce_sum(loss)
train_op = tf.train.AdamOptimizer().minimize(loss)


sess = tf.Session()
sess.run(tf.global_variables_initializer())
feed_dict = {label: [labels], result: values}

for i in range(0, 500):
    sess.run(train_op, feed_dict)

feed_dict中的值和标签如下:

[0.041410759078128294, 0.5139904997395468, 0.97, 0.9710565162951535, 
 0.6471067811865476, 0.20643446504023055]

[1, 15, 50, 60, 75, 95]

(范围1-100等于0-PI)

不知道为什么tensorflow会这样做。您能建议哪里出了问题以及如何解决吗?

1 个答案:

答案 0 :(得分:0)

这是因为您没有随机初始化权重矩阵W1W2。您正在使用:

W1 = tf.Variable(tf.ones([15, 1]) * 0.3)
W2 = tf.Variable(tf.ones([1, 15]) * 0.3)

但是您应该使用类似随机正态分布的方法来初始化它们:

W1 = tf.Variable(tf.random_normal((15,1), stddev=0.01)/tf.sqrt(n))

这是因为没有什么输入的,如果将所有权重初始化为相同的值(如您的情况),则隐藏层中的所有单位将相同,并且您的网络将无法学习。