美文网首页
TensorFlow实战学习:4-梯度下降解决线性回归【综合小练

TensorFlow实战学习:4-梯度下降解决线性回归【综合小练

作者: HelloWorld__ | 来源:发表于2018-09-28 23:45 被阅读0次

上一篇:3-TensorFlow基础知识
下一篇:5-实现一个CNN卷积神经网络

1 :用到的python库 Matplotlib

import matplotlib.pyplot as plt
import numpy as np

# 创建数据, -2到2之间取100个点
x = np.linspace(-2, 2, 100)
y = 3 * x +4

# 创建图像
plt.plot(x, y)

# 显示图像
plt.show()
image.png

2 概念

  • 线性回归 一般用于预测,比如股票的涨跌
  • 梯度下降 是机器学习中最核心的优化算法
  • tensorflow里的Operations(操作)如下
image.png
  • 一些等价的操作
image.png

3 代码实战

用梯度下降的优化方法来快速解决线性回归问题
(以下代码块组合起来,是一个完整可执行的程序)

  • 1 构建数据
# coding:utf-8

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

# 生成训练数据
points_nums = 100
vectors = []

# use numpy 的正太随机分布函数生成100个点
# 这些点的x,y坐标值对应线性方程 y = 0.1 * x + 0.2 
# 权重是(Weight) 0.1 偏差(Bias) 0.2

for i in xrange(points_nums):
    x1 = np.random.normal(0.0, 0.66)    # 正太分布的点
    y1 = 0.1 * x1 + 0.2 + np.random.normal(0.0, 0.04)
    vectors.append([x1, y1])    # verctors就是我们用于训练的数据

  • 2 用图像展示出我们生成的数据
x_data = [V[0] for V in vectors]  # 真实的点的x坐标
y_data = [V[1] for V in vectors]  # 真是的点的y坐标

# 图像1 展示100个随机数据点
plt.plot(x_data, y_data, "r*", label="Original datas") # 红色星星的点
plt.title("Linear regression using Gradient Descent")
plt.legend()   # 展示指定的标签label
plt.show()
image.png
  • 3 接下来我们要用TensorFlow里的梯度下降方法,找到一条线拟合我们的数据点,来预测之后点的分布

构建线性回归模型

# 初始化 Weight
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))  
b = tf.Variable(tf.zeros([1]))  # 初始化 Bias
# 模型计算出来的 y, 和y_data肯定有偏差
y = W * x_data + b  

定义损失函数:让y和y_data的偏差尽可能的小,
定义loss function(损失函数)或 cost function(代价函数),
对tensorflow的所有维度计算 ((y-y_data)^2)的和/N ,
tf.reduce_mean 计算所有维度的平均值

loss = tf.reduce_mean(tf.square(y - y_data))

用梯度下降的优化器, 来优化我们的loss

optimizer = tf.train.GradientDescentOptimizer(0.5)  # 学习率 0.5(相当于步长),一般小于1
train = optimizer.minimize(loss)

创建会话, 初始化数据

sess = tf.Session()

# 初始化数据流图中的所有变量
init = tf.global_variables_initializer()
sess.run(init)

训练 20 步

for step in xrange(20):
    # 优化每一步
    sess.run(train)
    # 打印出每一步的损失,权重和偏差
    print("Step={0}, Loss={1}, [Weight={2} Bias={3}]".format(step,
        sess.run(loss), sess.run(W), sess.run(b)))

图像2 绘制所有的点,并绘制出最佳拟合的直线

plt.plot(x_data, y_data, "r*", label="Original datas")  # 红色星星的点
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()

如图为训练出来的直线模型

image.png

相关文章

网友评论

      本文标题:TensorFlow实战学习:4-梯度下降解决线性回归【综合小练

      本文链接:https://www.haomeiwen.com/subject/gnbmoftx.html