以下代码运行,但是当我打印每个权重并偏置张量时,其中的字段都为零。我知道,我用零初始化它们,但为什么优化器不像我预期的那样工作?因此,成本函数也不会改变。什么是误解?
此处代码:
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})
答案 0 :(得分:0)
我想我发现了这个错误。批量在for循环中的每个迭代中再次初始化。这会导致数组不包含我的完整数据集。它只包含一个包含给定数据的字段。因此优化器无法进行优化,因为损失功能只包含一个数据字段,相当于只有一对x和y的一维功能。这个功能没有渐变,因为它是一个单点!当我削减代码的和平时,问题应该得到解决
batch_xs = [dataA[i], dataB[i], dataC[i], dataD[i],
dataE[i]]]
batch_ys = [[dataG[i]]]
并在for循环外面以正确的方式正确初始化批次。