TensorFlow 实现线性回归
1、生成高斯分布的随机数
导入numpy模块,通过numpy模块内的方法生成一组在方程
y = 2 * x + 3
周围小幅波动的随机坐标。代码如下:
import numpy as np
import matplotlib.pyplot as plot def getRandomPoints(count):
xList = []
yList = []
for i in range(count):
x = np.random.normal(0, 0.5)
y = 2 * x + 3 + np.random.normal(0, 0.3)
xList.append(x)
yList.append(y)
return xList, yList if __name__ == '__main__':
X, Y = getRandomPoints(1000)
plot.scatter(X, Y)
plot.show()
运行上述代码,输出图形如下:

2、采用TensorFlow来获取上述方程的系数
首先搭建基本的预估模型y = w * x + b,然后再采用梯度下降法进行训练,通过最小化损失函数的方法进行优化,最终训练得出方程的系数。
在下面的例子中,梯度下降法的学习率为0.2,训练迭代次数为100次。
def train(x, y):
# 生成随机系数
w = tf.Variable(tf.random_uniform([1], -1, 1))
# 生成随机截距
b = tf.Variable(tf.random_uniform([1], -1, 1))
# 预估值
preY = w * x + b # 损失值:预估值与实际值之间的均方差
loss = tf.reduce_mean(tf.square(preY - y))
# 优化器:梯度下降法,学习率为0.2
optimizer = tf.train.GradientDescentOptimizer(0.2)
# 训练:最小化损失函数
trainer = optimizer.minimize(loss) with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
# 打印初始随机系数
print('init w:', sess.run(w), 'b:', sess.run(b))
# 先训练个100次:
for i in range(100):
sess.run(trainer)
# 每10次打印下系数
if i % 10 == 9:
print('w:', sess.run(w), 'b:', sess.run(b)) if __name__ == '__main__':
X, Y = getRandomPoints(1000)
train(X, Y)
运行上面的代码,某次的最终结果为:
w = 1.9738449
b = 3.0027733
仅100次的训练迭代,得出的结果已十分接近方程的实际系数。
某次模拟训练中的输出结果如下:
init w: [-0.6468966] b: [0.52244043]
w: [1.0336646] b: [2.9878206]
w: [1.636582] b: [3.0026987]
w: [1.8528996] b: [3.0027785]
w: [1.930511] b: [3.0027752]
w: [1.9583567] b: [3.0027738]
w: [1.9683474] b: [3.0027735]
w: [1.9719319] b: [3.0027733]
w: [1.9732181] b: [3.0027733]
w: [1.9736794] b: [3.0027733]
w: [1.9738449] b: [3.0027733]
3、完整代码和结果
完整测试代码:
import numpy as np
import matplotlib.pyplot as plot
import tensorflow as tf def getRandomPoints(count, xscale=0.5, yscale=0.3):
xList = []
yList = []
for i in range(count):
x = np.random.normal(0, xscale)
y = 2 * x + 3 + np.random.normal(0, yscale)
xList.append(x)
yList.append(y)
return xList, yList def train(x, y, learnrate=0.2, cycle=100):
# 生成随机系数
w = tf.Variable(tf.random_uniform([1], -1, 1))
# 生成随机截距
b = tf.Variable(tf.random_uniform([1], -1, 1))
# 预估值
preY = w * x + b # 损失值:预估值与实际值之间的均方差
loss = tf.reduce_mean(tf.square(preY - y))
# 优化器:梯度下降法
optimizer = tf.train.GradientDescentOptimizer(learnrate)
# 训练:最小化损失函数
trainer = optimizer.minimize(loss) with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
# 打印初始随机系数
print('init w:', sess.run(w), 'b:', sess.run(b))
for i in range(cycle):
sess.run(trainer)
# 每10次打印下系数
if i % 10 == 9:
print('w:', sess.run(w), 'b:', sess.run(b))
return sess.run(w), sess.run(b) if __name__ == '__main__':
X, Y = getRandomPoints(1000)
w, b = train(X, Y)
plot.scatter(X, Y)
plot.plot(X, w * X + b, c='r')
plot.show()
最终效果图如下,蓝色为高斯随机分布数据,红色为最终得出的直线:

本文地址:https://www.cnblogs.com/laishenghao/p/9571343.html
TensorFlow 实现线性回归的更多相关文章
- tensorflow实现线性回归、以及模型保存与加载
内容:包含tensorflow变量作用域.tensorboard收集.模型保存与加载.自定义命令行参数 1.知识点 """ 1.训练过程: 1.准备好特征和目标值 2.建 ...
- TensorFlow简单线性回归
TensorFlow简单线性回归 将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.e ...
- 深度学习入门实战(二)-用TensorFlow训练线性回归
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者 :董超 上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能 ...
- 利用TensorFlow实现线性回归模型
准备数据: import numpy as np import tensorflow as tf import matplotlib.pylot as plt # 随机生成1000个点,围绕在y=0. ...
- tensorflow实现线性回归总结
1.知识点 """ 模拟一个y = 0.7x+0.8的案例 报警: 1.initialize_all_variables (from tensorflow.python. ...
- 如何用TensorFlow实现线性回归
环境Anaconda 废话不多说,关键看代码 import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' tf.a ...
- TensorFlow多元线性回归实现
多元线性回归的具体实现 导入需要的所有软件包: 因为各特征的数据范围不同,需要归一化特征数据.为此定义一个归一化函数.另外,这里添加一个额外的固定输入值将权重和偏置结合起来.为此定义函数 appe ...
- TensorFlow实现线性回归模型代码
模型构建 1.示例代码linear_regression_model.py #!/usr/bin/python # -*- coding: utf-8 -* import tensorflow as ...
- 学习TensorFlow,线性回归模型
学习TensorFlow,在MNIST数据集上建立softmax回归模型并测试 一.代码 <span style="font-size:18px;">from tens ...
- tensorflow 学习1——tensorflow 做线性回归
. 首先 Numpy: Numpy是Python的科学计算库,提供矩阵运算. 想想list已经提供了矩阵的形式,为啥要用Numpy,因为numpy提供了更多的函数. 使用numpy,首先要导入nump ...
随机推荐
- Web Api跨域访问配置及调用示例
1.Web Api跨域访问配置. 在Web.config中的system.webServer内添加以下代码: <httpProtocol> <customHeaders> &l ...
- Linux load average负载量分析与解决思路
一.load average top命令中load average显示的是最近1分钟.5分钟和15分钟的系统平均负载.系统平均负载表示 系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或 ...
- django —— 邮件
官方文档 1.11 配置settings.py # QQ邮箱为例, 其他邮箱对应的SMTP配置可查官方 EMAIL_HOST = "smtp.qq.com" EMAIL_PORT ...
- 【转】Java学习---Java核心数据结构(List,Map,Set)使用技巧与优化
[原文]https://www.toutiao.com/i6594587397101453827/ Java核心数据结构(List,Map,Set)使用技巧与优化 JDK提供了一组主要的数据结构实现, ...
- Stop Bitbucket prompting for password in git
出处:http://qosys.info/485/bitbucket-git-prompt-for-password In some cases after adding public ssh key ...
- xpath获取带注释的text
from lxml import etree html_str = """<div id="box1">this from blog.cs ...
- Eclipse Mars 2安装Drools6.4插件(Drools and jBPM tools)时无法安装JBoss Runtime Drools Detector
在eclipse上本地安装Drools6.4Final的时候出现两个组件无法正常安装的情况,具体组件如下: 具体的提示信息为: Cannot complete the install because ...
- 随手练——小米OJ 高弗雷勋爵
高弗雷勋爵 题目链接:https://code.mi.com/problem/list/view?id=113 这个解法比较暴力,主要需要注意的是一颗子弹 弹死两个及以上的情况. #include & ...
- HTTPS_SSL apache认证、配置的、步骤以及原理说明
一 .1.单向认证,就是传输的数据加密过了,但是不会校验客户端的来源 2.双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址,想要用系统的人没有证书就访问不了系统HTTP ...
- Invoking "cmake" failed报错处理
运行$ pip install -U rosdep rosinstall_generator wstool rosinstall six vcstools运行完成后再重新编译