深度学习(2)回归问题_深度学习回归处理什么问题-程序员宅基地

技术标签: tensorflow  深度学习  

一. 问题提出与解析

1. Machine Learning

  • make decisions
  • going left/right → \to discrete
  • increase/decrease → \to continuous

2. Continuous Prediction

在这里插入图片描述

  • f θ : x → y f_θ:x→y fθ:xy
  • x : i n p u t d a t a x:input data x:inputdata
  • f ( x ) : p r e d i c t i o n f(x):prediction f(x):prediction
  • y : r e a l d a t a , g r o u n d − t r u t h y:real data,ground-truth y:realdata,groundtruth

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

  • [ ( W X + b − Y ) ] 2 [(WX+b-Y)]^2 [(WX+bY)]2
  • l o s s = ∑ i ( w ∗ x i + b − y i ) 2 loss=\sum_i{(w*x_i+b-y_i)^2} loss=i(wxi+byi)2
  • M i n i m i z e   l o s s Minimize\ loss Minimize loss
  • w ′ ∗ x + b ′ → y w'*x+b'→y wx+by

6. Gradient Descent

(1) 1-D
w ′ = w ′ − l r ∗ d y d w w'=w'-lr*\frac{dy}{dw} w=wlrdwdy
在这里插入图片描述

x ′ = x − 0.005 ∗ d y d w x'=x-0.005*\frac{dy}{dw} x=x0.005dwdy
可以看到,函数的导数始终指向函数值变大的方向,因此,如果要求 l o s s loss loss函数的极小值的话,就需要沿导数的反方向前进,即 − l r ∗ d y d w -lr*\frac{dy}{dw} lrdwdy,衰减因子 l r lr lr的引入是为了防止步长变大,跨度太大。
(2) 2-D
在这里插入图片描述
Find w ′ , b ′ w',b' w,b

  • l o s s = ∑ i ( w ∗ x i + b − y i ) 2 loss=\sum_i{(w*x_i+b-y_i)^2} loss=i(wxi+byi)2
  • 分别对w和b求偏导数,然后沿着偏导数的反向前进,即:
    • w ′ = w − l r ∗ ∂ l o s s ∂ w w'=w-lr*\frac{∂loss}{∂w} w=wlrwloss
    • b ′ = b − l r ∗ ∂ l o s s ∂ b b'=b-lr*\frac{∂loss}{∂b} b=blrbloss
  • w ′ ∗ x + b ′ → y w'*x+b'→y wx+by

Learning Process
在这里插入图片描述

Loss surface
在这里插入图片描述

二. 回归问题实战

1. 步骤

(1) 根据随机初始化的 w , x , b , y w,x,b,y w,x,b,y的数值来计算 L o s s   F u n c t i o n Loss\ Function Loss Function;
(2) 根据当前的 w , x , b , y w,x,b,y w,x,b,y的值来计算梯度;
(3) 更新梯度,将 w ′ w' w赋值给 w w w,如此往复循环;
(4) 最后面的 w ′ w' w b ′ b' b就会作为模型的参数。

2. Step1: Compute Loss

共有100个点,每个点有两个维度,所以数据集维度为 [ 100 , 2 ] [100,2] [100,2],按照 [ ( x 0 , y 0 ) , ( x 1 , y 1 ) , … , ( x 99 , y 99 ) ] [(x_0,y_0 ),(x_1,y_1 ),…,(x_{99},y_{99} )] [(x0,y0),(x1,y1),,(x99,y99)]排列,则损失函数为:
l o s s = [ ( 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 ) ] 2 loss=[(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})]^2 loss=[(w0x0+b0y0)]2+[(w0x1+b0y1)]2++[(w0x99+b0y99)]2
即:
l o s s = ∑ i ( w ∗ x i + b − y i ) 2 loss=\sum_i(w*x_i+b-y_i)^2 loss=i(wxi+byi)2
初始值设 w 0 = b 0 = 0 w_0=b_0=0 w0=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

l o s s 0 = ( w x 0 + b − y 0 ) 2 loss_0=(wx_0+b-y_0)^2 loss0=(wx0+by0)2
∂ l o s s 0 ∂ w = 2 ( w x 0 + b − y 0 ) x 0 \frac{∂loss_0}{∂w}=2(wx_0+b-y_0)x_0 wloss0=2(wx0+by0)x0
∂ l o s s ∂ w = 2 ∑ ( w x i + b − y i ) x i \frac{∂loss}{∂w}=2\sum(wx_i+b-y_i)x_i wloss=2(wxi+byi)xi
∂ l o s s ∂ b = 2 ∑ ( w x i + b − y i ) \frac{∂loss}{∂b}=2\sum(wx_i+b-y_i) bloss=2(wxi+byi)
w ′ = w − l r ∗ ∂ l o s s ∂ w w'=w-lr*\frac{∂loss}{∂w} w=wlrwloss
b ′ = b − l r ∗ ∂ l o s s ∂ b b'=b-lr*\frac{∂loss}{∂b} b=blrbloss

4. Step3: Set w = w ′ w=w' w=wand loop

w ← w ′ w←w' ww
b ← b ′ b←b' bb
在这里插入图片描述

计算出最终的w和b的值就可以带入模型进行预测了:
w ′ x + b ′ → p r e d i c t w' x+b'→predict wx+bpredict

5. 代码

import numpy as np


# y = wx + b
def compute_error_for_line_given_points(b, w, points):
    totalError = 0
    for i in range(0, len(points)):
        x = points[i, 0]
        y = points[i, 1]
        # computer mean-squared-error
        totalError += (y - (w * x + b)) ** 2
    # average loss for each point
    return totalError / float(len(points))


def step_gradient(b_current, w_current, points, learningRate):
    b_gradient = 0
    w_gradient = 0
    N = 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)*x
        w_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_b
    w = starting_w
    # update for several times
    for 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.0001
    initial_b = 0  # initial y-intercept guess
    initial_w = 0  # initial slope guess
    num_iterations = 1000
    print("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 = 0 w=0,b=0 w=0,b=0的时候,损失值 e r r o r ≈ 5565.11 error≈5565.11 error5565.11;
在1000轮迭代后, w ≈ 1.48 , b ≈ 0.09 w≈1.48,b≈0.09 w1.48,b0.09,损失值 e r r o r ≈ 112.61 error≈112.61 error112.61,要大大小于原来的损失值。

参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43360025/article/details/119464457

智能推荐

【软件质量保证与测试】练习1_软件测试与质量保证pta test 21-练习1-程序员宅基地

文章浏览阅读950次。主观题8-1 软件测试的价值IBM公司研究发现: 如需求分析阶段引入一个缺陷,在测试执行阶段前修改成本为1,在编码阶段后修改成本则为10,在维护阶段,修改成本则为100。在测试阶段前的每个阶段进行静态测试的缺陷消除率为50%,测试阶段的缺陷消除率为80%。 假设某项目开发过程中分别有需求、设计、编码、测试、维护 5个阶段(瀑布模型),其中在需求、设计、编码阶段各引入10个缺陷(共30个缺陷)。试计算并比较提前测试与编码后测试两种方案的缺陷修改成本。说明:缺陷消除率:指发现的缺陷数占总缺陷数的比例。_软件测试与质量保证pta test 21-练习1

(赠源码)Python+django+Mysql公交线路查询系统85021-计算机毕业设计_python查实时公交情况查询-程序员宅基地

文章浏览阅读335次,点赞4次,收藏2次。公交线路查询系统的主要使用者分为管理员、乘客用户,实现功能包括后台首页、轮播图、公告管理、资源管理(新闻列表、新闻分类列表)、交流管理(论坛列表、论坛分类列表)、系统用户(管理员、乘客用户)、模块管理(线路信息、异常通知、投诉建议)等功能。本系统的使用可以实现公交线路查询的信息化,可以方便用户查看公交路线信息等,可以大大提高管理效率。_python查实时公交情况查询

Datax DB2插件开发_datax 接入db2-程序员宅基地

文章浏览阅读1.4k次。对于datax来说, 其实所有的关系型数据库步骤都差不多, 不同的就在于不同的数据库对于SQL的要求:例如开发流程1. 新建module2.DB2配置文件处理1. 新建module2.DB2配置文件处理Datax/db2reader/src/main/resources/{json文件}: 负责生成jar包和json模板Datax/db2reader/pom.xml: 负责maven编译,配置依赖项Datax/db2reader/src/main/assembly/package.xml: _datax 接入db2

计算机专业毕设选题,java毕设选题-程序员宅基地

文章浏览阅读44次。计算机专业毕设选题,java毕设选题

STM32CubeMX使用-程序员宅基地

文章浏览阅读1.4k次。一、新建工程首先,打开,第一次使用的朋友可以点击右侧的和检查一下软件更新并且找到对应芯片的固件库然后下载,软件和固件库都推荐是使用最新版的,这里不多介绍。完毕之后点击来创建一个新的工程。在弹出的界面中找到并选择对应芯片型号,可以在左上角的对话框中搜索,选中后点击来新建工程。_stm32cubemx

repeater里绑定dropdownlist控件各行的值-程序员宅基地

文章浏览阅读111次。//repeater绑定数据事件绑定答案dropdownlist protected void rpQuestionAnswer_ItemDataBound(object sender, RepeaterItemEventArgs e) { DropDownList ddl = e.Item.FindControl("drpRightAnswe..._repeater设置dropdownlist的值

随便推点

以得物商品列表数据为例,打造python爬虫_得物爬虫-程序员宅基地

文章浏览阅读6.9k次,点赞3次,收藏31次。原创来自本人的公众号:阿嚏个技术公众号文章地址:文章仅限学习交流所用,禁止商业用途,如有不适,请联系作者删除。1、爬虫思路其实就是解决爬什么,怎么爬的问题。爬什么好解决,一般都是看中一个网站的数据,采集到本地进行分析整理。接着就是针对需要爬的页面进行分析,页面分析的过程就是解决怎么爬的问题,包括页面请求的地址、请求的参数、返回的数据格式等,这些相关问题搞清楚了,就可以用程序模拟用户的请求去获取想要的数据。本文通过得物微信小程序分析入手,获取品牌商品列表来获取在得物上架的商品信息.._得物爬虫

【pycharm】【安装和管理Python包】_pycharm 自带的python包-程序员宅基地

文章浏览阅读866次,点赞20次,收藏7次。帮助您查看解释器中的Python包,并管理它们。你可以使用这个来查看PyCharm已经安装了哪些包,例如如果你选择Flask作为你的项目类型,一些包将会被安装,比如Jinja 2和Flask包。在Packages工具窗口中,您可以输入请求,PyCharm将搜索PyPi存储库并返回与您的搜索匹配的最相关的包。如果您现在检查已安装软件包的列表,请求就在那里,准备导入并在我们的脚本中使用。在这种情况下,您需要单击三个点,然后选择删除包。要安装该软件包,您可以单击安装,这将使用该软件包的最新稳定版本。_pycharm 自带的python包

IE 10以上HTML css兼容问题,前端开发中的兼容性问题-CSS篇-程序员宅基地

文章浏览阅读944次。(一)前言浏览器兼容性问题一直都让我很头疼,网上大神们给出的解决方法也是五花八门,向后或向前兼容的说法都有,所以自己整理一下,如果有不恰当的欢迎指正!(二)CSS兼容问题的原因我觉得要解决问题,就要先找出问题的根源,所以先研究通常出现的CSS兼容问题的原因有哪些……1、浏览器内核的差异浏览器的内核是分为两个部分的,一是渲染引擎,另一个是JS引擎。现在JS引擎比较独立,内核更加倾向于说渲染引擎。由于..._ie bootstrap.min.css height兼容性

跑通yolox-s官方源码(可与yolov5s做对比试验)_yolox_s.pth-程序员宅基地

文章浏览阅读3.7k次,点赞8次,收藏37次。跑通yolox-s官方源码(可与yolov5s做对比试验)_yolox_s.pth

适用于渗透测试不同阶段的工具收集整理(转载)-程序员宅基地

文章浏览阅读1.1k次。Red Teaming / Adversary Simulation Toolkit该资源清单列表涵盖了一系列,适用于渗透测试不同阶段的开源/商业工具。如果你想为此列表添加贡献,欢迎你向我发送pull requestGithub:github.com/Snowming04内容侦察武器化交货命令与控制横向运动建立立足点升级特权数据泄露杂项参考侦察主动情报收集Ey..._gophish获取cookie

centos6.8服务器配置之编译安装PHP、配置nginx-程序员宅基地

文章浏览阅读122次。php version 5.6.31、nginx version: nginx/1.10.21、下载:wget http://cn2.php.net/distributions/php-5.6.31.tar.gz2、安装组件yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg li..._centos6 安装 libiconv.so.2