Tensorflow实现线性回归

线性回归理论以及公式:

目标公式:

y=w1x1+w2x2+⋯+wnxn+by=w1x1+w2x2+⋯+wnxn+b

y=w_1x_1+w_2x_2+\cdots+w_nx_n+b
当有m组训练公式的时候,输入数据写成矩阵的形式:

X=⎡⎣⎢⎢⎢⎢⎢⎢⎢x(1)1x(2)1⋮x(m)1x(1)2x(2)2⋮x(m)2⋯⋯⋱⋯x(1)nx(2)n⋮x(m)n⎤⎦⎥⎥⎥⎥⎥⎥⎥X=[x1(1)x2(1)⋯xn(1)x1(2)x2(2)⋯xn(2)⋮⋮⋱⋮x1(m)x2(m)⋯xn(m)]\mathbf{X}=\left[ \begin{matrix} x^{(1)}_1 & x^{(1)}_2 & \cdots & x^{(1)}_n\\ x^{(2)}_1 & x^{(2)}_2 & \cdots & x^{(2)}_n\\ \vdots & \vdots & \ddots & \vdots\\ x^{(m)}_1 & x^{(m)}_2 & \cdots & x^{(m)}_n\\ \end{matrix} \right]
权重写成权重向量:

w=[w1,w2,⋯,wn]Tw=[w1,w2,⋯,wn]T

\boldsymbol{w}=[w_1, w_2, \cdots, w_n]^T
偏置项向量: b=[b,b,⋯,b]Tn×1b=[b,b,⋯,b]n×1T\boldsymbol{b}=[b,b,\cdots,b]^T_{n\times1}

Y=Xw+bY=Xw+b

\mathbf{Y}=\mathbf{X}\boldsymbol{w}+\boldsymbol{b}
一般来说,为了加快训练速度,梯度下降的时候,是以向量为单位,对向量进行求导。给出线性回归的使用到的求导公式:

∂∂s(x−As)TW(x−As)=−2ATW(x−As)∂∂s(x−As)TW(x−As)=−2ATW(x−As)

\frac{\partial}{\partial \boldsymbol{s}}(\boldsymbol{x}-\mathbf{A}\boldsymbol{s})^T \mathbf{W}(\boldsymbol{x}-\mathbf{A}\boldsymbol{s})=-2\mathbf{A}^T\mathbf{W}(\boldsymbol{x}-\mathbf{A}\boldsymbol{s})
其中: WW\mathbf{W}是对称矩阵,小写的粗体是向量。公式来自于Matrix Cookbook这个PDF文档。
给出损失函数的矩阵化定义:

J(w,b)=(y−Xw−b)TIm×m(y−Xw−b)J(w,b)=(y−Xw−b)TIm×m(y−Xw−b)

J(\boldsymbol{w},\boldsymbol{b})=(\boldsymbol{y}-\mathbf{X}\boldsymbol{w}-\boldsymbol{b})^T\boldsymbol{I}_{m\times m}(\boldsymbol{y}-\mathbf{X}\boldsymbol{w}-\boldsymbol{b})
Im×mIm×m\boldsymbol{I}_{m\times m}是m阶的单位矩阵,这里只是为了更好的理解求导过程,单位矩阵肯定是对称矩阵,实际可以不加。
根据求导公式:

∂J(w,b)∂w=−2XT(y−b−Xw)∂J(w,b)∂w=−2XT(y−b−Xw)

\frac{\partial J(\boldsymbol{w},\boldsymbol{b})}{\partial{\boldsymbol{w}}}=-2\mathbf{X}^T(\boldsymbol{y}-\boldsymbol{b}-\mathbf{X}\boldsymbol{w})

∂J(w,b)∂b=−2(y−Xw−b)∂J(w,b)∂b=−2(y−Xw−b)

\frac{\partial J(\boldsymbol{w},\boldsymbol{b})}{\partial{\boldsymbol{b}}}=-2(\boldsymbol{y}-\mathbf{X}\boldsymbol{w}-\boldsymbol{b})
梯度下降的更新过程:

w=w−α∂J(w,b)∂ww=w−α∂J(w,b)∂w

\boldsymbol{w}=\boldsymbol{w}-\alpha\frac{\partial J(\boldsymbol{w},\boldsymbol{b})}{\partial{\boldsymbol{w}}}

b=b−α∂J(w,b)∂bb=b−α∂J(w,b)∂b

\boldsymbol{b}=\boldsymbol{b}-\alpha\frac{\partial J(\boldsymbol{w},\boldsymbol{b})}{\partial{\boldsymbol{b}}}
其中 αα\alpha是学习速率。

tensorflow实现:

实际使用tensorflow的过程中,可以使用库函数实现自动化微分求导的过程,不必手写。

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt# 输入数据
x_data = np.random.normal(size=(100, 3))
w_real = np.matrix([3.0, 5.1, 1.7]).T
b_real = 0.2
y_data = np.matmul(x_data, w_real) + b_real * np.ones((100, 1))# 占位符,输送数据
x = tf.placeholder(dtype=tf.float32, shape=[None, 3], name="x_train")
y_true = tf.placeholder(dtype=tf.float32, shape=None, name="y_true")with tf.name_scope("inference") as scope:w = tf.Variable(tf.zeros([3, 1]))# 不显示地声明形状,形状会自适应b = tf.Variable(0.0)y_pred = tf.matmul(x, w) + bwith tf.name_scope("loss") as scope:# 损失函数 loss = tf.reduce_mean(1 / 2 * tf.square(y_pred - y_true))with tf.name_scope("train") as scope:# 训练,使用Adam算法优化,学习步长0.1train = tf.train.AdamOptimizer(0.1).minimize(loss)# 用于绘图
x_axis = []
y_axis = []with tf.Session() as sess:sess.run(tf.global_variables_initializer())# 执行1000次训练for i in range(1000):sess.run(train, feed_dict={x: x_data, y_true: y_data})x_axis.append(i)# 这里也需要feed数据y_axis.append(sess.run(loss, feed_dict={x: x_data, y_true: y_data}))print("loss:", sess.run(loss, feed_dict={x: x_data, y_true: y_data}))print(sess.run(w), sess.run(b))tf.summary.FileWriter("./graph", sess.graph)plt.plot(x_axis, y_axis)plt.show()

结果输出:
loss: 4.579861e-13
3.0000002,5.100001,1.7
0.19999987
损失函数图片:

tensorboard图片:

Tensorflow实现线性回归相关推荐

  1. TensorFlow简单线性回归

    TensorFlow简单线性回归 将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.e ...

  2. 【深度学习】Tensorflow完成线性回归对比机器学习LinearRegression()

    首先构建一个线性的点状图 import warnings warnings.filterwarnings('ignore') import numpy as np import matplotlib. ...

  3. 利用TensorFlow解决线性回归问题

    利用TensorFlow解决线性回归问题 1.导入必要的库 import tensorflow as tf 在之前的基础上,还需要导入TensorFlow的库. 2.创建一个训练函数 def trai ...

  4. TensorFlow多元线性回归实现

    TensorFlow实现多元线性回归 多元线性回归的具体实现 导入需要的所有软件包: 因为各特征的数据范围不同,需要归一化特征数据.为此定义一个归一化函数.另外,这里添加一个额外的固定输入值将权重和偏 ...

  5. 使用深度学习框架 Tensorflow 实现线性回归 (Linear Model)

    文章目录 TensorFlow 线性回归 一.单变量线性模型方程 1.概念简述 2.TensorFlow 中的优化方法 --- 训练模块 2.1.简述 2.2.tf.train.Optimizer 类 ...

  6. tensorflow之线性回归

    今天从机器学习的第一个实例,线性回归,开始感受tensorllow的使用. 来张图来感受一下 直接上代码吧: #!/usr/bin/env python3 # -*- coding: utf-8 -* ...

  7. 【Deep Learning】Tensorflow实现线性回归

    # -*- coding: utf-8 -*- ''' Created on 2018年4月20日@author: user ''' import tensorflow as tf import nu ...

  8. TensorFlow——实现线性回归算法

    import tensorflow as tf import numpy as np import matplotlib.pyplot as plt#使用numpy生成200个随机点 x_data=n ...

  9. tensorflow tutorials(一):用tensorflow建立线性回归模型

    声明:版权所有,转载请联系作者并注明出 from __future__ import print_functionimport tensorflow as tf import numpy as np ...

最新文章

  1. 2022-2028年中国胶片手套行业市场研究及前瞻分析报告
  2. 初学者的机器学习入门实战教程!
  3. 斐波那契数列性质【记住】
  4. 利用 force index优化sql语句性能
  5. VS中怎么新建Web服务器项目,VS中新建网站和新建WEB项目的区别
  6. xshell 7 官网免费下载
  7. FCKeditor的开发精简
  8. Docker 实战教程之从入门到提高 (四)
  9. [USACO 1.3.3]Calf Flac
  10. 前端学习(3249):总结生命周期
  11. 【C/C++开发】C++11 并发指南二(std::thread 详解)
  12. python实现屏幕录制_JavaScript 屏幕录制 API 学习
  13. 设置透明色有残留怎么办_冬天车玻璃结冰,车被冻住了怎么办?据说只有10%的人做对了...
  14. 计算不确定度(C语言-大物实验)-复制即可使用
  15. 给宝宝做一个cocos免费游戏-故事和开始界面
  16. 橘子娱乐完成华创资本千万美元B+轮融资
  17. 【微信防封域名】【微信不死域名】【微信域名白名单】
  18. 网络工程师必备 5款网络故障排除工具
  19. 基于51单片机的恒温加热系统--main.c文件
  20. 使用代理服务器打不开网页_代理服务器:信息安全表象下的另一面

热门文章

  1. 购买域名以及申请证书
  2. 机器学习入门笔记(一):模型性能评价与选择
  3. VsCode crtl + 鼠标右键 python代码无法跳转
  4. Python并行实例
  5. Ubuntu下安装支付宝安全控件
  6. 敏捷开发般若敏捷系列之二:什么是敏捷(上)(无住,不住于法,破法执)...
  7. @property 的属性class
  8. PipedInputStream/PipedOutputStream
  9. JS 获取随机颜色值
  10. iOS学习——UITableViewCell两种重用方法的区别