tensorflow (2) 简单的回归问题

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()






猜你喜欢

转载自blog.csdn.net/chen13017535518/article/details/81451155