tensorflow入门(1):构造线性回归模型

今天让我们一起来学习如何用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值基本符合我们之前假设直线的值

原文地址:https://www.cnblogs.com/XDU-Lakers/p/10468152.html

时间: 2024-07-31 22:46:53

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

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

思路:在数据上选择一条直线y=Wx+b,在这条直线上附件随机生成一些数据点如下图,让TensorFlow建立回归模型,去学习什么样的W和b能更好去拟合这些数据点. 1)随机生成1000个数据点,围绕在y=0.1x+0.3 周围,设置W=0.1,b=0.3,届时看构建的模型是否能学习到w和b的值. import numpy as np import tensorflow as tf import matplotlib.pyplot as plt num_points=1000 vectors_se

TensorFlow入门:线性回归

随机.mini-batch.batch(见最后解释) 在每个 epoch 送入单个数据点.这被称为随机梯度下降(stochastic gradient descent).我们也可以在每个 epoch 送入一堆数据点,这被称为 mini-batch 梯度下降,或者甚至在一个 epoch 一次性送入所有的数据点,这被称为 batch 梯度下降. 转自:https://cloud.tencent.com/developer/article/1004866 TensorFlow基本使用 TensorFl

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

本文主要探索如何使用深度学习框架 MXNet 或 TensorFlow 实现线性回归模型?并且以 Kaggle 上数据集 USA_Housing 做线性回归任务来预测房价. 回归任务,scikit-learn 亦可以实现,具体操作可以查看 线性回归模型的原理与 scikit-learn 实现. 载入数据 import pandas as pd import numpy as np name = '../dataset/USA_Housing.csv' dataset = pd.read_csv(

【scikit-learn】scikit-learn的线性回归模型

 内容概要 怎样使用pandas读入数据 怎样使用seaborn进行数据的可视化 scikit-learn的线性回归模型和用法 线性回归模型的评估測度 特征选择的方法 作为有监督学习,分类问题是预測类别结果,而回归问题是预測一个连续的结果. 1. 使用pandas来读取数据 Pandas是一个用于数据探索.数据处理.数据分析的Python库 In [1]: import pandas as pd In [2]: # read csv file directly from a URL and

线性回归模型(Linear Regression)及Python实现

线性回归模型(Linear Regression)及Python实现 http://www.cnblogs.com/sumai 1.模型 对于一份数据,它有两个变量,分别是Petal.Width和Sepal.Length,画出它们的散点图.我们希望可以构建一个函数去预测Sepal.Length,当我们输入Petal.Width时,可以返回一个预测的Sepal.Length.从散点图可以发现,可以用一条直线去拟合,这时我们可以构建一元线性回归模型:hθ(x) = θ0 + θ1x1 (x1= Pe

TensorFlow 入门之手写识别(MNIST) softmax算法

TensorFlow 入门之手写识别(MNIST) softmax算法 MNIST 卢富毓 softmax回归 softmax回归算法 TensorFlow实现softmax softmax回归算法 我们知道MNIST的每一张图片都表示一个数字,从0到9.我们希望得到给定图片代表每个数字的概率.比如说,我们的模型可能推测一张包含9的图片代表数字9的概率是80%但是判断它是8的概率是5%(因为8和9都有上半部分的小圆),然后给予它代表其他数字的概率更小的值. 这是一个使用softmax回归(sof

scikit-learn的线性回归模型

来自 http://blog.csdn.net/jasonding1354/article/details/46340729 内容概要 如何使用pandas读入数据 如何使用seaborn进行数据的可视化 scikit-learn的线性回归模型和使用方法 线性回归模型的评估测度 特征选择的方法 作为有监督学习,分类问题是预测类别结果,而回归问题是预测一个连续的结果. 1. 使用pandas来读取数据 Pandas是一个用于数据探索.数据处理.数据分析的Python库 In [1]: import

转:TensorFlow入门(六) 双端 LSTM 实现序列标注(分词)

http://blog.csdn.net/Jerr__y/article/details/70471066 欢迎转载,但请务必注明原文出处及作者信息. @author: huangyongye @creat_date: 2017-04-19 前言 本例子主要介绍如何使用 TensorFlow 来一步一步构建双端 LSTM 网络(听名字就感觉好腻害的样子),并完成序列标注的问题.先声明一下,本文中采用的方法主要参考了[中文分词系列] 4. 基于双向LSTM的seq2seq字标注这篇文章.该文章用

线性回归模型原理及其应用

前言 最近有在学习网易云课堂上<吴恩达机器学习>这门课程, 受益匪浅, 然后打算将有关线性回归模型的知识点总结下来, 也就有了本文. 若存在错误的地方, 还请指正, 谢谢! 目录 1. 一元线性回归 2. 多元线性回归 3. 两大算法优缺点 4. 算法优化问题 5. 多元线性回归应用 正文 线性回归, 是回归分析中的一种, 其表示自变量与因变量之间存在线性关系. 回归分析是从数据出发, 考察变量之间的数量关系, 并通过一定的数学关系式将这种关系描述出来, 再通过关系式来估计某个变量的取值, 同