tensorflow线性回归误差激增

我正在尝试使用tensorflow拟合一个非常简单的线性回归模型。然而,损失(均方误差)不仅没有减少到零,反而激增了。

首先,我生成我的数据:

x_data = np.random.uniform(high=10,low=0,size=100)y_data = 3.5 * x_data -4 + np.random.normal(loc=0, scale=2,size=100)

然后,我定义计算图:

X = tf.placeholder(dtype=tf.float32, shape=100)Y = tf.placeholder(dtype=tf.float32, shape=100)m = tf.Variable(1.0)c = tf.Variable(1.0)Ypred = m*X + closs = tf.reduce_mean(tf.square(Ypred - Y))optimizer = tf.train.GradientDescentOptimizer(learning_rate=.1)train = optimizer.minimize(loss)

最后,运行100个周期:

steps = {}steps['m'] = []steps['c'] = []losses=[]for k in range(100):    _m = session.run(m)    _c = session.run(c)    _l = session.run(loss, feed_dict={X: x_data, Y:y_data})    session.run(train, feed_dict={X: x_data, Y:y_data})    steps['m'].append(_m)    steps['c'].append(_c)    losses.append(_l)

然而,当我绘制损失时,我得到的是:

enter image description here

完整代码也可以在这里找到这里


回答:

每当你看到成本随着周期数的增加而单调增加时,这是一个明确的迹象,表明你的学习率太高了。反复重新运行你的训练,每次将学习率乘以1/10,直到成本函数明显随着周期数的增加而减少。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注