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

时间:2017-10-31 05:17:21

标签: tensorflow

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

我有点疑惑为什么在每个成功的时代之后,损失正在增加。预计每一连续的时期都不会有损失!

这是我的代码(请告诉我,如果您希望我也分享输出!):(非常感谢您花时间回答它。)

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]})))            

干杯!

1 个答案:

答案 0 :(得分:2)

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

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