我正在尝试使用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)
然而,当我绘制损失时,我得到的是:
完整代码也可以在这里找到这里。
回答:
每当你看到成本随着周期数的增加而单调增加时,这是一个明确的迹象,表明你的学习率太高了。反复重新运行你的训练,每次将学习率乘以1/10,直到成本函数明显随着周期数的增加而减少。