【问题标题】:GradientDescentOptimizer error keeps growingGradientDescentOptimizer 错误不断增长
【发布时间】:2019-07-08 04:15:41
【问题描述】:

我正在尝试使用GradientDescentOptimizer 进行线性回归,但我得到的结果是我的错误增长得非常快,然后溢出。我做错了什么?

这是我在每次迭代中的错误的示例结果:

2163732.5
1274220300000000.0
7.274338e+23
4.141076e+32
inf
inf
...

这是我的代码

import os 
import pandas as pd
import tensorflow as tf
from sklearn.model_selection import train_test_split

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
tf.logging.set_verbosity(tf.logging.ERROR)

data = pd.read_csv('test.csv').values
x_vals = data[:,1:]
y_vals = data[:,0]
n_dim = x_vals.shape[1]

W = tf.Variable(tf.ones([1, n_dim]))
b = tf.Variable(0.5, dtype=tf.float32)

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

prediction = tf.reduce_sum(W * X) + b
error = Y - prediction
loss = tf.reduce_mean(tf.square(error))

optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

with tf.Session() as sess:

    init = tf.initializers.global_variables()
    sess.run(init)

    for i in range (0, 100):

        x_train, x_test, y_train, y_test = train_test_split(x_vals, y_vals, test_size=100, train_size=100)

        _, loss_result = sess.run([optimizer, loss], {X: x_train, Y: y_train})
        print(loss_result)

我使用公式y = (0.5 * x_1) + (3 * x_2) 生成了我的数据,所以它应该是完全线性的(忽略舍入误差):它看起来像这样:

y,x_1,x_2
28,9,8
24,6,7
31,9,9
34,8,10
24,12,6
...

Here's my full data

【问题讨论】:

    标签: python tensorflow gradient-descent


    【解决方案1】:

    您的梯度超出了最小值,因此正在爆炸。您应该尝试增加 epoch 的数量并将学习率降低到 1e-5 的数量级,甚至更小,例如 1e-7 、 1e-8 。对于 epoch = 100000 和学习率 = 0.0000003 的值,它不会过冲。

    【讨论】:

    • 谢谢,我做了这些更改,错误不再溢出。但是,错误仍然会从 60 左右反弹到 90 左右,并且不会收敛到解决方案。你知道为什么会这样吗?我想我的计算一定有问题。
    • 不确定,但您可以尝试多种方法。 1)玩弄时代和学习率。 2)您尝试使用随机值初始化权重或使用某种初始化程序而不是使用固定值对其进行初始化。 3)对数据进行分析,检查异常值以及修复方法。您还可以在将数据放入模型之前对其进行规范化。
    猜你喜欢
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2016-02-24
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多