1.简单的线性回归,定义一百个点,x由随机正态分布生成,y由已知的线性关系加随机噪声生成。
2.x,y相当于监督学习中的输入数据和数据标签。
3.用tf定义一个线性模型 ,其中w,b随机生成
4.根据输入x,得到输出y_,再根据y和y_求出损失值loss,梯度反向优化w,b
#-*- coding:UTF-8 -*-
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
point = 100 #定义100组训练数据
vectors = []
for i in range(point):
x = np.random.normal(0.0,0.66) #随即数据,均值为0,方差为0.66的正态分布随机取值
y = 0.1*x + 0.2 +np.random.normal(0.0,0.04) #y = 0.1x+0.2+随机正态噪声
vectors.append([x,y]) #[[x1,y1],[x2,y2]....[x100,y100]]
#定义输入数据和标签
x_data = [v[0] for v in vectors] #[x1,x2...x100]
y_data = [v[1] for v in vectors] #[y1,y2...y100]
#定义模型
W = tf.Variable(tf.random_uniform([1],-1.0,1.0)) #均匀分布,一维,-1到1之间随机生成,tf.random_uniform参见https://www.w3cschool.cn/tensorflow_python/tensorflow_python-rnix2gv7.html
b = tf.Variable(tf.zeros([1])) #初始偏置为0,打印格式为 [0.](与w格式相同)
y = W*x_data + b
loss = tf.reduce_mean(tf.aquare(y - y_data)) #损失值为标签值减去输出值平方和后取均值
optimizer = tf.train.GradientDescentOptimizer(0.5) #梯度下降优化,学习率0.5
train = optimizer.minimize(loss) #训练并最小化损失值
sess = tf.Session() #创建tf会话
init = tf.global_variables_initializer() #初始化所有tf变量命令
sess.run(init) #会话中初始化
for step in range(20):
sess.run(train) #训练(目标就是loss最优)
print("第 {} 步的 损失={}, 权重={}, 偏差={}".format(step+1,sess.run(loss),sess.run(W),sess.run(b)))
#画图部分用到pyplot
plt.plot(x_data, y_data, 'r*', label="Original data") # 红色星形的点
plt.title("Linear Regression using Gradient Descent") # 标题,表示 "梯度下降解决线性回归"
plt.plot(x_data, sess.run(W) * x_data + sess.run(b), label="Fitted line") # 拟合的线
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.show()
# 关闭会话
sess.close()