今天让我们一起来学习如何用TF实现线性回归模型。所谓线性回归模型就是y = W * x + b的形式的表达式拟合的模型。

我们先假设一条直线为 y = 0.1x + 0.3,即W = 0.1,b = 0.3,然后利用随机数在这条直线附近产生1000个随机点,然后利用tensorflow构造的线性模型去学习,最后对比模型所得的W和b与真实值的差距即可。

(某天在浏览Github的时候,发现了一个好东西,Github上有一个比较好的有关tensorflow的Demo合集,有注释有源代码非常适合新手入门。)

import numpy as np     #numpy库可用来存储和处理大型矩阵
import tensorflow as tf
import matplotlib.pyplot as plt    #主要用于画图

#产生1000个随机点
num_points = 1000

vectors_set = []
for i in range(num_points):
#利用random的内置函数产生1000个符合 均值为0,标准差为0.55的正态分布
  x1 = np.random.normal(0.0, 0.55)
  y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03)
  vectors_set.append([x1,y1])

x_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]

plt.scatter(x_data, y_data, c = 'r')
plt.show()

#生成1维的W矩阵,取值为【-1,1】之间的随机数
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name = 'W')
#生成1维的b矩阵,初始值为0
b = tf.Variable(tf.zeros([1]), name = 'b')
#经过计算得出预估值Y
y = W * x_data + b

#以预估值Y和实际值Y_data之间的均方误差作为损失
loss = tf.reduce_mean(tf.square(y - y_data), name = 'loss')

#采用梯度下降法进行优化参数(梯度下降原理详情见另一篇博客)
#optimizer = tf.train.GradientDescentOptimizera(0.5).minimize(loss)
optimizer = tf.train.GradientDescentOptimizer(0.5)

#训练的过程就是最小化这个误差值
train = optimizer.minimize(loss, name = 'train')

sess = tf.Session()

init = tf.global_variables_initializer()
sess.run(init)

#打印初始化的W和b的值
print('W = ', sess.run(W), 'b = ', sess.run(b), "loss = ", sess.run(loss))
#因为数据规模不大且符合正态分布,所以执行20次训练就能达到一定效果
for step in range(20):
  sess.run(train)
#输出训练后的W和B
  print('W = ', sess.run(W), 'b = ', sess.run(b), "loss = ", sess.run(loss))

实验结果如下:

1.1000个散点图

2.预测出W、b以及loss的值

W = [0.40727448] b = [0.] loss = 0.12212546
W = [0.30741683] b = [0.30278787] loss = 0.014318982
W = [0.24240384] b = [0.3016729] loss = 0.0071945195
W = [0.19786316] b = [0.30094698] loss = 0.0038506198
W = [0.16734858] b = [0.30044967] loss = 0.0022811447
W = [0.1464432] b = [0.30010894] loss = 0.001544504
W = [0.13212104] b = [0.29987553] loss = 0.0011987583
W = [0.122309] b = [0.2997156] loss = 0.0010364805
W = [0.11558682] b = [0.29960606] loss = 0.00096031476
W = [0.11098149] b = [0.29953098] loss = 0.0009245659
W = [0.1078264] b = [0.29947957] loss = 0.00090778706
W = [0.10566486] b = [0.29944435] loss = 0.00089991186
W = [0.10418401] b = [0.2994202] loss = 0.0008962157
W = [0.10316949] b = [0.29940367] loss = 0.0008944806
W = [0.10247444] b = [0.29939234] loss = 0.00089366647
W = [0.10199826] b = [0.2993846] loss = 0.00089328433
W = [0.10167204] b = [0.29937926] loss = 0.0008931049
W = [0.10144854] b = [0.29937562] loss = 0.00089302065
W = [0.10129543] b = [0.29937312] loss = 0.00089298113
W = [0.10119054] b = [0.29937142] loss = 0.0008929627
W = [0.10111867] b = [0.29937026] loss = 0.000892954

根据实验结果可以看出第20次预测出的W和b值基本符合我们之前假设直线的值

tensorflow入门(1):构造线性回归模型的更多相关文章

  1. 用Tensorflow完成简单的线性回归模型

    思路:在数据上选择一条直线y=Wx+b,在这条直线上附件随机生成一些数据点如下图,让TensorFlow建立回归模型,去学习什么样的W和b能更好去拟合这些数据点. 1)随机生成1000个数据点,围绕在 ...

  2. tensorflow学习笔记四----------构造线性回归模型

    首先通过构造随机数,模拟数据. import numpy as np import tensorflow as tf import matplotlib.pyplot as plt # 随机生成100 ...

  3. 【TensorFlow入门完全指南】模型篇·线性回归模型

    首先呢,进行import,对于日常写代码来说,第二行经常写成:import numpy as np,这样会更加简洁.第三行import用于绘图. 定义了学习率.迭代数epoch,以及展示的学习步骤,三 ...

  4. 【TensorFlow入门完全指南】模型篇·逻辑斯蒂回归模型

    import库,加载mnist数据集. 设置学习率,迭代次数,batch并行计算数量,以及log显示. 这里设置了占位符,输入是batch * 784的矩阵,由于是并行计算,所以None实际上代表并行 ...

  5. 【TensorFlow入门完全指南】模型篇·最近邻模型

    最近邻模型,更为常见的是k-最近邻模型,是一种常见的机器学习模型,原理如下: KNN算法的前提是存在一个样本的数据集,每一个样本都有自己的标签,表明自己的类型.现在有一个新的未知的数据,需要判断它的类 ...

  6. [tensorflow] 线性回归模型实现

    在这一篇博客中大概讲一下用tensorflow如何实现一个简单的线性回归模型,其中就可能涉及到一些tensorflow的基本概念和操作,然后因为我只是入门了点tensorflow,所以我只能对部分代码 ...

  7. TensorFlow入门教程集合

    TensorFlow入门教程之0: BigPicture&极速入门 TensorFlow入门教程之1: 基本概念以及理解 TensorFlow入门教程之2: 安装和使用 TensorFlow入 ...

  8. TensorFlow从1到2(七)线性回归模型预测汽车油耗以及训练过程优化

    线性回归模型 "回归"这个词,既是Regression算法的名称,也代表了不同的计算结果.当然结果也是由算法决定的. 不同于前面讲过的多个分类算法或者逻辑回归,线性回归模型的结果是 ...

  9. 线性回归模型的 MXNet 与 TensorFlow 实现

    本文主要探索如何使用深度学习框架 MXNet 或 TensorFlow 实现线性回归模型?并且以 Kaggle 上数据集 USA_Housing 做线性回归任务来预测房价. 回归任务,scikit-l ...

随机推荐

  1. Go 语言读书笔记

    Go语言的设计理念很明确,就是将动态类型语言的编程容易度和静态类型语言的安全效率结合起来.     Go语言,又称Golang,是Google开发的一款静态强类型.编译型.并发型,并具有垃圾回收机制的 ...

  2. Eclipse文件路径

    经常我们需要读取某个文件,一般情况下,在Eclipse工程中,路径为./src/....

  3. iOS性能优化技巧

    通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化.结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化. 一.view优化 1.不透明的View 设置 ...

  4. Android中的Service:Binder,Messenger,AIDL

    http://blog.csdn.net/luoyanglizi/article/details/51594016 http://blog.csdn.net/luoyanglizi/article/d ...

  5. maven配置jdk1.8环境

    <!-- 局部jdk配置,pom.xml中 --> <build> <plugins> <plugin> <groupId>org.apac ...

  6. sync_binlog innodb_flush_log_at_trx_commit 浅析【转】

    innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写入策略以及数据安全性的关键参数.本文从参数含义,性能,安全角度阐述两个参数为不同的 ...

  7. windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速

    原文地址:http://www.jianshu.com/p/c245d46d43f0 写在前面的话 2016年11月29日,Google Brain 工程师团队宣布在 TensorFlow 0.12 ...

  8. 转:10分钟了解JS堆、栈以及事件循环的概念

    https://juejin.im/post/5b1deac06fb9a01e643e2a95?utm_medium=fe&utm_source=weixinqun 前言 其实一开始对栈.堆的 ...

  9. raindi python魔法函数(一)之__repr__与__str__

    __repr__和__str__都是python中的特殊方法,都是用来输出实例对象的,如果没有定义这两个方法在打印的时候只会输出实例所在的内存地址 这种方式的输出没有可读性,并不能直观的体现实例.py ...

  10. zoj3299 线段树区间更新,坐标建立线段树的方式

    /* 平台和砖块的坐标离散化,边缘坐标转换成单位长度 处理下落信息,sum数组维护区间的砖块数量 把平台按高度从高到低排序,询问平台区间的砖块有多少,询问后将该区域砖块数置0 */ #include& ...