上一篇: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()

2 概念
-
线性回归
一般用于预测,比如股票的涨跌 -
梯度下降
是机器学习中最核心的优化算法 - tensorflow里的
Operations(操作)
如下

- 一些等价的操作

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

- 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()
如图为训练出来的直线模型

网友评论