tnblog
首页
视频
资源
登录

python 梯度下降和反向传播(下)(学习笔记)

3126人阅读 2023/4/14 14:56 总访问:3475707 评论:0 收藏:0 手机
分类: AI

python 梯度下降和反向传播(下)(学习笔记)

前言


回到我们以前讲的有一个激活函数b,这是用来干嘛的呢?
举个例子:有时候豆豆的毒性会随着体积越大而毒性越小,那么此时b所代表的是y毒性自由的移动,w则是毒性。


如果b为0的时候代价函数就是前面几篇中的样子。


把b当成第三个坐标轴,当我们为b附上值,通过一点点的绘制会形成一个曲线,绘制很多之后就是一个曲面图。


在这个曲面图的最低点的w和b值放回到预测函数中,会让预测的误差最小。

如何求出最低点?


首先我们在e和w的曲面切上一刀,然后通过梯度下降算法调整w,但是你会发现曲线的最低点并不是这个曲面的最低点。


如果我们在曲面的b和e上也来一刀,我们发现只要将在e和w的曲面上的点,慢慢移动到最b和e上的最低点就比较接近于完美了。


但事实上这又产生了两次计算,如果把w和b看成一个整体使用空间位移的方式进行一点点的挪动就会慢慢到达底部了。


由于我们有两个面,所以有两个斜率下降,通过两个面同时下降时的变量称之为偏导数,如果把w和b看作一个向量合起来就是一个新的合向量,沿着这个合向量进行下降的过程称为梯度下降。
所以我们说梯度下降比斜率下降更快。

编程实践


首先我们更改一下获取豆豆的变化dataset.py

  1. import numpy as np
  2. ...
  3. def get_beans2(counts):
  4. xs = np.random.rand(counts)
  5. xs = np.sort(xs)
  6. ys = np.array([(0.7*x+(0.5-np.random.rand())/5+0.5) for x in xs])
  7. return xs,ys
  1. # 生成-1到2每次递增加0.1的一组ws
  2. ws = np.arange(-1,2,0.1)
  3. # 生成-2到2每次递增加0.1的一组bs
  4. bs = np.arange(-2,2,0.1)
  5. for b in bs:
  6. es = []
  7. for w in ws:
  8. # 获取预测值
  9. y_pre = w * xs + b
  10. # 计算所有样本的均方误差
  11. e = np.sum((ys-y_pre)**2)*(1/m)
  12. es.append(e)
  13. plt.plot(ws,es)
  14. plt.show()
  15. # 丝滑

  1. # 获取图形对象
  2. fig = plt.figure()
  3. # 创建3D对象
  4. ax = fig.add_subplot(111,projection='3d')
  5. # 生成-1到2每次递增加0.1的一组ws
  6. ws = np.arange(-1,2,0.1)
  7. # 生成-2到2每次递增加0.1的一组bs
  8. bs = np.arange(-2,2,0.1)
  9. for b in bs:
  10. es = []
  11. for w in ws:
  12. # 获取预测值
  13. y_pre = w * xs + b
  14. # 计算所有样本的均方误差
  15. e = np.sum((ys-y_pre)**2)*(1/m)
  16. es.append(e)
  17. # 2D
  18. # plt.plot(ws,es)
  19. # 3D 传入三个坐标轴,zdir表示谁朝上。
  20. ax.plot(ws, es, b, zdir='y')
  21. # 散点
  22. # ax.scatter(ws, es, b, zdir='y')
  23. plt.show()


这里由于z轴的范围太大了,所以我们可以通过ax.set_zlim(0,2)设置一下z轴的范围。

  1. fig = plt.figure()
  2. # 创建3D对象
  3. ax = fig.add_subplot(111,projection='3d')
  4. # 设置垂直范围
  5. ax.set_zlim(0,2)


接下来我们通过代码,进行50000次训练然后同时从b和w进行梯度下降。

  1. # 50000次学习
  2. for _ in range(500):
  3. for i in range(100):
  4. # 获取散点的值
  5. x = xs[i]
  6. y = ys[i]
  7. # w曲面进行斜率下降
  8. dw = 2*x**2*w + 2*x*b - 2*x*y
  9. # b曲面进行斜率下降
  10. db = 2*b + 2*x*w - 2*y
  11. # 设置阿尔法
  12. alpha = 0.01
  13. # 获取新误差值
  14. w = w - alpha * dw
  15. # 合梯度下降
  16. b = b - alpha * db
  17. # 清除绘图窗口
  18. plt.clf()
  19. # 重新绘制
  20. plt.scatter(xs,ys)
  21. y_pre = w*xs + b
  22. plt.xlim(0,1)
  23. plt.ylim(0,1.2)
  24. plt.plot(xs,y_pre)
  25. # 暂停0.01秒,不暂停看不到绘制图
  26. plt.pause(0.01)


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

python学习 2-基本语法

基础:python脚本语言,不需要编译(像C#、Java、PHP、C++需要编译成机器可识别的语言), 而直接由解释器解释,很多地方类似...

python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

python实例 1-日志抓取处理 补错附日志小技巧

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

python实例 2-12306抢票(一) 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...

python安装pip以及使用pip安装requests等模块

pip很简单的介绍pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。如果想...

python数据集合区别

列表(list):可读写,值可以重复,有序排列,初始化语法:['tom',‘jerry’]元组(tuple):只读,值可以重复,...

python实例 2-12306抢票(二)

第二篇 刷票与下单1.记住登陆上一篇写了登陆:http://www.tnblog.net/cz/article/details/162 为了方便调试 不让每次登陆都...

使用VS Code开发python

Vs Code开发Python可以很好的支持代码调试、智能提示、代码对齐等1:下载VS Codehttps://code.visualstudio.com/Downloadvs ...

python变量与命名

Python使用等号 ( = ) 作为赋值运算符,例如a = 66 就是一条赋值语句,作用就是将66赋值给变量a。Python是弱类型语言,弱类...

python关键字和内置函数

Python中包含了如下所示的关键字:上面这些关键字都不能作为变量名。另外,Python 3还提供了如下表所示的内置函数:也不能...

python基础输入和输出

Python使用print()函数向打印程序输出,采用input()函数接收程序输入。print()函数的语法格式如下:print(value,...,sep=&#...

python基本数据类型

Python包含两大类基本数据类型:数值类型、字符串类型,三大类组合数据类型:集合类型、序列类型和字典类型.数值类型:整型...

python中通过fake_useragent生成随机UserAgent

fake_useragent第三方库,来实现随机请求头的设置;GitHub ---> https://github.com/hellysmile/fake-useragent安...

python 升级pip

一条命令即可: python -m pip install --upgrade pip 安装成功后,一般是在python目录下面的Scripts里边的

python html编码解码

使用方法:html.escape(s)与html.unescape即可 import html s="<div>jsdlfjsl</div>" #html编...
这一世以无限游戏为使命!
排名
2
文章
636
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术