为什么我的张量流图重量和偏差不会改变?

时间:2017-12-05 22:27:35

标签: python python-3.x tensorflow

以下代码运行,但是当我打印每个权重并偏置张量时,其中的字段都为零。我知道,我用零初始化它们,但为什么优化器不像我预期的那样工作?因此,成本函数也不会改变。什么是误解?

此处代码:

x = tf.placeholder(tf.float32, [None, 5], name='input')

W = tf.Variable(tf.zeros([5,1]))
b = tf.Variable(tf.zeros([1]))

y = tf.nn.softmax(tf.matmul(x, W) + b) 


y_tensor = tf.placeholder(tf.float32, [None, 1],     name='output')
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_tensor 
* tf.log(y), reduction_indices=[1]))

optimizer = 
 tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)


session = tf.Session()
init = tf.global_variables_initializer()
session.run(init)

for i in range(10):
  batch_xs = [dataA[i], dataB[i], dataC[i], dataD[i],
          dataE[i]]]
  batch_ys = [[dataG[i]]]
  session.run(optimizer ,feed_dict={x: batch_xs, y_tensor: batch_ys})

1 个答案:

答案 0 :(得分:0)

我想我发现了这个错误。批量在for循环中的每个迭代中再次初始化。这会导致数组不包含我的完整数据集。它只包含一个包含给定数据的字段。因此优化器无法进行优化,因为损失功能只包含一个数据字段,相当于只有一对x和y的一维功能。这个功能没有渐变,因为它是一个单点!当我削减代码的和平时,问题应该得到解决

 batch_xs = [dataA[i], dataB[i], dataC[i], dataD[i],
          dataE[i]]]
 batch_ys = [[dataG[i]]]

并在for循环外面以正确的方式正确初始化批次。