案例
假如我有一系列的数据x-y,x-y之间是呈线性关系的,如果我们需要用一条直线拟合这条直线,我们该如何做?
下面的程序中,train_x是一系列从-1到1之间的数字,train_y是x的两倍加10,然后随机加了一个0~1之间的数字
接下来我们建立模型,X和Y是一个待初始化的张量占位符,在优化过程中,模型中的XY会一直改变为train_x和train_y中的数据,然后优化器会进行优化,使得w斜率和b截距按照使误差减小的方向变化,这样,w和b经过迭代最终就使模型满足数据了
模型建立好了以后,我们开始运行模型。首先打开一个会话,然后一定要记得初始化全部变量。接下来我们对全体数据进行10次遍历,在每一次迭代过程中,将一个坐标输入,并计算误差,然后利用梯度下降更正w和b。最后,我们输出解出来的w和b。
import tensorflow as tf
import numpy as np
train_x = np.linspace(-1, 1, 101)
train_y = 2 * train_x + np.random.rand(train_x.shape[0]) + 10
X = tf.placeholder("float")
Y = tf.placeholder("float")
w = tf.Variable(0.0, name = "w")
b = tf.Variable(0.0, name = "b")
loss = tf.square(Y - tf.multiply(X,w) - b)
train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
with tf.Session() as session:
session.run(tf.global_variables_initializer())
for i in range(10):
for x,y in zip(train_x, train_y):
session.run(train_op, feed_dict={X:x, Y:y})
print("w: ", session.run(w))
print("b: ", session.run(b))
运行效果: