深度学习(2)回归问题
深度学习(2)回归问题
- 一. 问题提出与解析
- 1. Machine Learning
- 2. Continuous Prediction
- 3. Linear Equation
- 4. With Noise?
- 5. Find w′w'w′,b′b'b′
- 6. Gradient Descent
- 二. 回归问题实战
- 1. 步骤
- 2. Step1: Compute Loss
- 3. Step2: Compute Gradient and update
- 4. Step3: Set w=w′w=w'w=w′and loop
- 5. 代码
一. 问题提出与解析
1. Machine Learning
- make decisions
- going left/right →\to→ discrete
- increase/decrease →\to→ continuous
2. Continuous Prediction
- fθ:x→yf_θ:x→yfθ:x→y
- x:inputdatax:input datax:inputdata
- f(x):predictionf(x):predictionf(x):prediction
- y:realdata,ground−truthy:real data,ground-truthy:realdata,ground−truth
3. Linear Equation
- y=w*x+b
- 1.567=w*1+b
- 3.043=w*2+b
→\to→ Closed Form Solution
- w=1.477
- b=0.089
4. With Noise?
- y=w*x+b+ϵ
- ϵ ~ N(0,1)
- 1.567=w*1+b+eps
- 3.043=w*2+b+eps
- 4.519=w*2+b+eps
- …
→\to→ - Y=(WX+b)
For Example
- w?
- b?
5. Find w′w'w′,b′b'b′
- [(WX+b−Y)]2[(WX+b-Y)]^2[(WX+b−Y)]2
- loss=∑i(w∗xi+b−yi)2loss=\sum_i{(w*x_i+b-y_i)^2}loss=∑i(w∗xi+b−yi)2
- MinimizelossMinimize\ lossMinimize loss
- w′∗x+b′→yw'*x+b'→yw′∗x+b′→y
6. Gradient Descent
(1) 1-D
w′=w′−lr∗dydww'=w'-lr*\frac{dy}{dw}w′=w′−lr∗dwdy
x′=x−0.005∗dydwx'=x-0.005*\frac{dy}{dw}x′=x−0.005∗dwdy
可以看到,函数的导数始终指向函数值变大的方向,因此,如果要求losslossloss函数的极小值的话,就需要沿导数的反方向前进,即−lr∗dydw-lr*\frac{dy}{dw}−lr∗dwdy,衰减因子lrlrlr的引入是为了防止步长变大,跨度太大。
(2) 2-D
Findw′,b′w',b'w′,b′
- loss=∑i(w∗xi+b−yi)2loss=\sum_i{(w*x_i+b-y_i)^2}loss=∑i(w∗xi+b−yi)2
- 分别对w和b求偏导数,然后沿着偏导数的反向前进,即:
- w′=w−lr∗∂loss∂ww'=w-lr*\frac{∂loss}{∂w}w′=w−lr∗∂w∂loss
- b′=b−lr∗∂loss∂bb'=b-lr*\frac{∂loss}{∂b}b′=b−lr∗∂b∂loss
- w′∗x+b′→yw'*x+b'→yw′∗x+b′→y
Learning Process
Loss surface
二. 回归问题实战
1. 步骤
(1) 根据随机初始化的w,x,b,yw,x,b,yw,x,b,y的数值来计算LossFunctionLoss\ FunctionLoss Function;
(2) 根据当前的w,x,b,yw,x,b,yw,x,b,y的值来计算梯度;
(3) 更新梯度,将w′w'w′赋值给www,如此往复循环;
(4) 最后面的w′w'w′和b′b'b′就会作为模型的参数。
2. Step1: Compute Loss
共有100个点,每个点有两个维度,所以数据集维度为[100,2][100,2][100,2],按照[(x0,y0),(x1,y1),…,(x99,y99)][(x_0,y_0 ),(x_1,y_1 ),…,(x_{99},y_{99} )][(x0,y0),(x1,y1),…,(x99,y99)]排列,则损失函数为:
loss=[(w0x0+b0−y0)]2+[(w0x1+b0−y1)]2+⋯+[(w0x99+b0−y99)]2loss=[(w_0 x_0+b_0-y_0)]^2+[(w_0 x_1+b_0-y_1)]^2+⋯+[(w_0 x_{99}+b_0-y_{99})]^2loss=[(w0x0+b0−y0)]2+[(w0x1+b0−y1)]2+⋯+[(w0x99+b0−y99)]2
即:
loss=∑i(w∗xi+b−yi)2loss=\sum_i(w*x_i+b-y_i)^2loss=i∑(w∗xi+b−yi)2
初始值设w0=b0=0w_0=b_0=0w0=b0=0。
(1) b和w的初始值都为0,points是传入的100个点,是data.csv里的数据;
(2) len(points)
就是传入数据点的个数,即100; range(0, len(points))
就代表从0循环到100;
(3) x=points[i, 0]
表示取第i个点中的第0个值,即第一个元素,相当于p[i][0]
; 同理,y=points[i, 1]
表示取第i个点中的第1个值,即第二个元素,相当于p[i][1]
;
(4) totalError
为总损失值,除以是len(points)
是平均损失值。
3. Step2: Compute Gradient and update
loss0=(wx0+b−y0)2loss_0=(wx_0+b-y_0)^2loss0=(wx0+b−y0)2
∂loss0∂w=2(wx0+b−y0)x0\frac{∂loss_0}{∂w}=2(wx_0+b-y_0)x_0∂w∂loss0=2(wx0+b−y0)x0
∂loss∂w=2∑(wxi+b−yi)xi\frac{∂loss}{∂w}=2\sum(wx_i+b-y_i)x_i ∂w∂loss=2∑(wxi+b−yi)xi
∂loss∂b=2∑(wxi+b−yi)\frac{∂loss}{∂b}=2\sum(wx_i+b-y_i)∂b∂loss=2∑(wxi+b−yi)
w′=w−lr∗∂loss∂ww'=w-lr*\frac{∂loss}{∂w}w′=w−lr∗∂w∂loss
b′=b−lr∗∂loss∂bb'=b-lr*\frac{∂loss}{∂b}b′=b−lr∗∂b∂loss
4. Step3: Set w=w′w=w'w=w′and loop
w←w′w←w'w←w′
b←b′b←b'b←b′
计算出最终的w和b的值就可以带入模型进行预测了:
w′x+b′→predictw' x+b'→predictw′x+b′→predict
5. 代码
import numpy as np# y = wx + b
def compute_error_for_line_given_points(b, w, points):totalError = 0for i in range(0, len(points)):x = points[i, 0]y = points[i, 1]# computer mean-squared-errortotalError += (y - (w * x + b)) ** 2# average loss for each pointreturn totalError / float(len(points))def step_gradient(b_current, w_current, points, learningRate):b_gradient = 0w_gradient = 0N = float(len(points))for i in range(0, len(points)):x = points[i, 0]y = points[i, 1]# grad_b = 2(wx+b-y)b_gradient += (2 / N) * ((w_current * x + b_current) - y)# grad_w = 2(wx+b-y)*xw_gradient += (2 / N) * x * ((w_current * x + b_current) - y)# update w'new_b = b_current - (learningRate * b_gradient)new_w = w_current - (learningRate * w_gradient)return [new_b, new_w]def gradient_descent_runner(points, starting_b, starting_w, learning_rate, num_iterations):b = starting_bw = starting_w# update for several timesfor i in range(num_iterations):b, w = step_gradient(b, w, np.array(points), learning_rate)return [b, w]def run():points = np.genfromtxt("data.csv", delimiter=",")learning_rate = 0.0001initial_b = 0 # initial y-intercept guessinitial_w = 0 # initial slope guessnum_iterations = 1000print("Starting gradient descent at b = {0}, w = {1}, error = {2}".format(initial_b, initial_w,compute_error_for_line_given_points(initial_b, initial_w, points)))print("Running...")[b, w] = gradient_descent_runner(points, initial_b, initial_w, learning_rate, num_iterations)print("After {0} iterations b = {1}, w = {2}, error = {3}".format(num_iterations, b, w,compute_error_for_line_given_points(b, w, points)))if __name__ == '__main__':run()
运行结果如下:
可以看到,在w=0,b=0w=0,b=0w=0,b=0的时候,损失值error≈5565.11error≈5565.11error≈5565.11;
在1000轮迭代后,w≈1.48,b≈0.09w≈1.48,b≈0.09w≈1.48,b≈0.09,损失值error≈112.61error≈112.61error≈112.61,要大大小于原来的损失值。
参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》
深度学习(2)回归问题相关推荐
- 电气论文实现:深度学习分位数回归实现电力负荷区间预测
个人电气博文目录链接:学好电气全靠它,个人电气博文目录(持续更新中-) 之前写过一版电力负荷区间预测:电气论文:负荷区间预测(机器学习简单实现) 这版区间负荷预测思维和上一版不一样. 核心代码见图(无 ...
- 深度学习pytorch--softmax回归(三)
softmax回归的简洁实现 获取和读取数据 定义和初始化模型 softmax和交叉熵损失函数 定义优化算法 模型评价 训练模型 小结 完整代码 前两篇链接: 深度学习pytorch–softmax回 ...
- 深度学习pytorch--softmax回归(二)
softmax回归的从零开始实现 实验前思考 获取和读取数据 获取数据集 查看数据集 查看下载后的.pt文件 查看mnist_train和mnist_test 读取数据集 查看数据迭代器内容 初始化模 ...
- 深度学习pytorch--softmax回归(一)
softmax回归 前几节介绍的线性回归模型适用于输出为连续值的情景.在另一类情景中,模型输出可以是一个像图像类别这样的离散值.对于这样的离散值预测问题,我们可以使用诸如softmax回归在内的分类模 ...
- 深度学习利用回归算法进行数据预测
机床加工过程中,因热变形产生的热误差占机床加工总误差的40%-70%.热误差值补偿是解决热误差的主流技术,如何将神经网络建模与热误差值预测结合起来,是今天介绍的重点. 本项目研究对象为立式数控加工中心 ...
- 深度学习-softmax回归
softmax regression 1- softmax 基本概念 1-1 极大似然估计 2- Fashion-MNIST图像分类数据集 2-1 下载数据集 2-2 可视化 3- softmax回归 ...
- 【深度学习】回归任务评价方法(MSE、MAE、RMSE)
概念 在回归(Regression)方法中,我们预测一系列连续的值,在预测完后需要评价预测结果的好坏.关于这个评价标准,目前学术界有多种标准.在深度学习中最常见的是 MSE和 MAE. 对照表 评价方 ...
- 马毅教授讲座——反思深度学习:回归计算机视觉的挑战
7月3日,清华伯克利深圳学院暑期课程开课,邀请到加州大学伯克利分校电子工程与计算机系, ACM.IEEE Fellow,马毅教授为大家展开为期两周的<压缩感知和稀疏模型>的课程. 开课的第 ...
- 神经网络与深度学习:回归问题
回归问题 1.机器学习基础 1.1监督学习 1.2无监督学习 1.3半监督学习 2.一元线性回归 3.解析法实现一元回归 3.1 Python实现 3.2 NumPy实现 3.3 TensorFlow ...
- Datawhale 7月学习——李弘毅深度学习:回归
前情回顾 机器学习简介 1 回归模型 1.1 回归的概念及例子 回归(Regression)的意思就是找到一个函数 functionfunctionfunction ,通过输入特征 xxx,输出一个数 ...
最新文章
- 中科院微生物所王军课题组特别研究助理招聘
- 清华大学教授:唐杰——深度分析:人工智能的下个十年
- Binder学习指南
- java 文件下载漏洞,文件上传和下载漏洞
- 计算机操作员可以免考自考吗,计算机《职业资格证书》可以免考高
- 图像处理与图像识别笔记(三)图像增强1
- 小学四则运算结对项目报告(GUI)
- abaqus推荐用哪一版本的_ABAQUS推荐资料合集(一)
- easyui tree 默认选中第一个元素
- 这两天测试软件发现的问题
- kotlin使用spring data jpa(三)
- 【Java 8 in Action】Stream
- HDLBit Exams/ece241 2014 q3
- Greek Gods,Roman Gods and Chinese Gods
- python greedy 加油次数
- Mysql事务隔离级别和锁机制(间隙锁、临建锁)
- FLASH抽象层(FAL)程序的应用(rt-thread)
- html画布动漫人物,canvas画布画卡通人物--哆啦A梦
- Private VLAN 与Switchport Protected
- 华为海思芯片 网口烧录详解(翻遍全网资料 结合实际成功操作)
热门文章
- java代码杨辉三角_用java实现杨辉三角的示例代码
- 安卓 spinner下拉框 做模糊查询_想做短视频不知道用什么工具?11个免费制作工具收藏起来...
- python中什么是实例-在Python中使用’__rsub__’方法的典型实例是什么?
- Android开发之6.0动态权限工具类(高德地图官方扣出来的)附源码
- linux 流量 脚本,linux 检测网络出入流量 当达到一定量时 自动执行另一个脚本。...
- 计算机桌面组成部分教案,计算机基础 教案设计(完整版).doc
- 微信小程序错误监控方法谈
- 来自东软的 OpenStack 负载均衡即服务开源项目
- android ListView 刷新卡顿问题
- git忽略文件【转】