tensorflow学习之路 五:线性拟合
步骤:
1.随机生成100随机点作为x,定义一个方程y=k×X+b,使用方程计算y的值
#使用numpy生成100个随机的点
x_data = np.random.rand(100)
y_data = x_data*1+3
2.创建两个变量k和b,表示要建立的线性模型的斜率k和截距b,建立方程
#构造一个线性模型
b = tf.Variable(0.)#定义一个变量,初始值设为0.0
k = tf.Variable(0.)#定义一个变量,初始值设为0.0
#定义一个线性模型
y = k*x_data + b
3.定义loss值,使用二次代价函数的方法,其中y_data表示真实值,y表示预测值
#二次代价函数,计算误差
loss = tf.reduce_mean(tf.square(y_data-y))
4.定义优化方法,使用梯度下降法进行优化,定义梯度下降法
#定义一个梯度下降法进行训练优化
optimizer = tf.train.GradientDescentOptimizer(0.2)
5.使用梯度下降法优化loss,获得最小loss
#最小化代价函数,使用上面定义的梯度下降法优化loss,减少误差
train = optimizer.minimize(loss)
完整代码:
"""
tensorflow 简单使用案例
"""
import tensorflow as tf
import numpy as np
#使用numpy生成100个随机的点
x_data = np.random.rand(100)
y_data = x_data*1+3
#构造一个线性模型
b = tf.Variable(0.)#定义一个变量,初始值设为0.0
k = tf.Variable(0.)#定义一个变量,初始值设为0.0
#定义一个线性模型
y = k*x_data + b
#二次代价函数,计算误差
loss = tf.reduce_mean(tf.square(y_data-y))
#定义一个梯度下降法进行训练优化
optimizer = tf.train.GradientDescentOptimizer(0.2)
#最小化代价函数,使用上面定义的梯度下降法优化loss,减少误差
train = optimizer.minimize(loss)
#初始化变量
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for step in range(201):
sess.run(train)
if step%20 == 0:
print(step,sess.run([k,b,loss]))#每隔20步,显示斜率k,截距b,误差loss
结果:
迭代次数 斜率 截距 误差
0 [0.7523737, 1.405753, 2.9684691]
20 [1.301885, 2.835301, 0.0067594755]
40 [1.1900864, 2.8962953, 0.0026799745]
60 [1.1196907, 2.934701, 0.0010625487]
80 [1.075365, 2.9588835, 0.00042127658]
100 [1.0474545, 2.9741104, 0.00016702618]
120 [1.0298804, 2.9836981, 6.6222114e-05]
140 [1.0188147, 2.9897354, 2.6255619e-05]
160 [1.0118468, 2.9935367, 1.0409605e-05]
180 [1.0074596, 2.9959302, 4.1273847e-06]
200 [1.0046971, 2.9974375, 1.6363775e-06]
可以看出经过多次迭代,原本斜率截距都为0.0的初始值,慢慢接近原始数据,误差越来越小