TensfoFlow:线性回归损失随着连续的时期而增加(而不是减少)



我正在学习TensorFlow,并试图将其应用于一个简单的线性回归问题。 data是形状 [42x2] 的 numpy.ndarray 。

我有点困惑,为什么在每个成功时代之后,损失都会增加。难道损失不会随着每个连续的时代而减少吗!

这是我的代码(让我知道,如果你想让我也分享输出!): (非常感谢您抽出宝贵时间回答它。

1) 为因变量/自变量创建占位符

X = tf.placeholder(tf.float32, name='X')
Y = tf.placeholder(tf.float32,name='Y')

2) 为权重、偏差total_loss创建变量(在每个时期之后)

w = tf.Variable(0.0,name='weights')
b = tf.Variable(0.0,name='bias')

3)定义损失函数和优化器

Y_pred = X * w + b
loss = tf.reduce_sum(tf.square(Y - Y_pred), name = 'loss')
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.001).minimize(loss)

4)创建摘要事件和事件文件编写器

tf.summary.scalar(name = 'weight', tensor = w)
tf.summary.scalar(name = 'bias', tensor = b)
tf.summary.scalar(name = 'loss', tensor = loss)
merged = tf.summary.merge_all()
evt_file = tf.summary.FileWriter('def_g')
evt_file.add_graph(tf.get_default_graph())

5)并在会话中全部执行

with tf.Session() as sess1:
sess1.run(tf.variables_initializer(tf.global_variables()))
for epoch in range(10):
    summary, _,l = sess1.run([merged,optimizer,loss],feed_dict={X:data[:,0],Y:data[:,1]})
    evt_file.add_summary(summary,epoch+1)
    evt_file.flush()
    print("  new_loss: {}".format(sess1.run(loss,feed_dict={X:data[:,0],Y:data[:,1]})))            

干杯!

简短的回答是你的学习率太大了。 我能够通过将其从 0.001 更改为 0.0001 来获得合理的结果,但我只使用了您倒数第二条评论中的 23 点(我最初没有注意到您的最后一条评论),因此使用所有数据可能需要更低的数字。

0.001 似乎是一个非常低的学习率。 但是,真正的问题是您的损失函数使用的是reduce_sum而不是reduce_mean。 这会导致您的损失是一个很大的数字,这会向GradientDescentOptimizer发送非常强的信号,因此尽管学习率很低,但它还是超调了。 如果向训练数据添加更多点,问题只会变得更糟。 因此,使用reduce_mean来获得平均平方误差,您的算法将表现得更好。

最新更新