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 ...
随机推荐
- BBR,附CentOS 6/7配置过程
最近这段时间BBR都比较火,前面有说如何在CAC的Debian-8-64bit安装BBR正确打开方式,现在说下,CentOS 6/7配置过程. 推荐理由:没配置BBR前,用SS看U2B的速度206K/ ...
- USB 相关笔记
1分析已有代码项目 Android从USB声卡录制高质量音频-----使用libusb读取USB声卡数据 github 项目:usbaudio-android-demo usb声卡取数据项目也是参考的 ...
- 【转载】sql注入之入门
原文在:https://smelond.com MySql基础语法 mysql无非就是增删改查 mysql数据库结构: 数据库 test,test1 表名 admin,manage 数据 id,use ...
- 49_分析代理类的作用与原理及AOP概念
生活中的代理 武汉人从武汉的代理商手中买联想电脑和直接跑到北京传智播客旁边来找联想总部买电脑,你觉得最终的主体业务目标有什么区别吗?基本上一样吧,都解决了核心问题,但是,一点区别都没有吗?从代理商那里 ...
- Swift: Associated Types--为什么协议使用关联类型而不是泛型
关联类型的形式为类型的引用进而进行约束提供了条件: 同时能够简化语法形式. Swift: Associated Types http://www.russbishop.net/swift-associ ...
- ftp传输文件到指定服务器
#!/bin/bash filePrefix="dbname"localDir="/DBBackup"remoteDir="/Backup" ...
- 2018-2019-2 20165302 Exp5 MSF基础应用
1.实验目的 掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路 2.实验内容 一个主动攻击实践; (1分) MS17-010 一个针对浏览器的攻击:(1分) ms14_064 一个 ...
- 垃圾回收相关(深入理解Java虚拟机中的内容)
程序计数器.虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收.垃圾回收主要是针对 Java 堆和方法区进行. 判断一个对 ...
- WorldWind源码剖析系列:日志类Log
Utility工程中的日志类Log主要用来输出Debug状态下的调试信息.该类的类图如下: 日志类Log中使用到的类和内嵌结构体类型主要有以下这些: public class LogEventArgs ...
- WorldWind源码剖析系列:星球球体的加载与渲染
WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...