Tensorflow实现线性回归
Tensorflow实现线性回归
线性回归理论以及公式:
目标公式:
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]
权重写成权重向量:
\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}
\mathbf{Y}=\mathbf{X}\boldsymbol{w}+\boldsymbol{b}
一般来说,为了加快训练速度,梯度下降的时候,是以向量为单位,对向量进行求导。给出线性回归的使用到的求导公式:
\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(\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阶的单位矩阵,这里只是为了更好的理解求导过程,单位矩阵肯定是对称矩阵,实际可以不加。
根据求导公式:
\frac{\partial J(\boldsymbol{w},\boldsymbol{b})}{\partial{\boldsymbol{w}}}=-2\mathbf{X}^T(\boldsymbol{y}-\boldsymbol{b}-\mathbf{X}\boldsymbol{w})
\frac{\partial J(\boldsymbol{w},\boldsymbol{b})}{\partial{\boldsymbol{b}}}=-2(\boldsymbol{y}-\mathbf{X}\boldsymbol{w}-\boldsymbol{b})
梯度下降的更新过程:
\boldsymbol{w}=\boldsymbol{w}-\alpha\frac{\partial J(\boldsymbol{w},\boldsymbol{b})}{\partial{\boldsymbol{w}}}
\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实现线性回归相关推荐
- TensorFlow简单线性回归
TensorFlow简单线性回归 将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.e ...
- 【深度学习】Tensorflow完成线性回归对比机器学习LinearRegression()
首先构建一个线性的点状图 import warnings warnings.filterwarnings('ignore') import numpy as np import matplotlib. ...
- 利用TensorFlow解决线性回归问题
利用TensorFlow解决线性回归问题 1.导入必要的库 import tensorflow as tf 在之前的基础上,还需要导入TensorFlow的库. 2.创建一个训练函数 def trai ...
- TensorFlow多元线性回归实现
TensorFlow实现多元线性回归 多元线性回归的具体实现 导入需要的所有软件包: 因为各特征的数据范围不同,需要归一化特征数据.为此定义一个归一化函数.另外,这里添加一个额外的固定输入值将权重和偏 ...
- 使用深度学习框架 Tensorflow 实现线性回归 (Linear Model)
文章目录 TensorFlow 线性回归 一.单变量线性模型方程 1.概念简述 2.TensorFlow 中的优化方法 --- 训练模块 2.1.简述 2.2.tf.train.Optimizer 类 ...
- tensorflow之线性回归
今天从机器学习的第一个实例,线性回归,开始感受tensorllow的使用. 来张图来感受一下 直接上代码吧: #!/usr/bin/env python3 # -*- coding: utf-8 -* ...
- 【Deep Learning】Tensorflow实现线性回归
# -*- coding: utf-8 -*- ''' Created on 2018年4月20日@author: user ''' import tensorflow as tf import nu ...
- TensorFlow——实现线性回归算法
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt#使用numpy生成200个随机点 x_data=n ...
- tensorflow tutorials(一):用tensorflow建立线性回归模型
声明:版权所有,转载请联系作者并注明出 from __future__ import print_functionimport tensorflow as tf import numpy as np ...
最新文章
- 2022-2028年中国胶片手套行业市场研究及前瞻分析报告
- 初学者的机器学习入门实战教程!
- 斐波那契数列性质【记住】
- 利用 force index优化sql语句性能
- VS中怎么新建Web服务器项目,VS中新建网站和新建WEB项目的区别
- xshell 7 官网免费下载
- FCKeditor的开发精简
- Docker 实战教程之从入门到提高 (四)
- [USACO 1.3.3]Calf Flac
- 前端学习(3249):总结生命周期
- 【C/C++开发】C++11 并发指南二(std::thread 详解)
- python实现屏幕录制_JavaScript 屏幕录制 API 学习
- 设置透明色有残留怎么办_冬天车玻璃结冰,车被冻住了怎么办?据说只有10%的人做对了...
- 计算不确定度(C语言-大物实验)-复制即可使用
- 给宝宝做一个cocos免费游戏-故事和开始界面
- 橘子娱乐完成华创资本千万美元B+轮融资
- 【微信防封域名】【微信不死域名】【微信域名白名单】
- 网络工程师必备 5款网络故障排除工具
- 基于51单片机的恒温加热系统--main.c文件
- 使用代理服务器打不开网页_代理服务器:信息安全表象下的另一面