当前位置: 首页 > news >正文

TensorFlow入门(二十二、梯度下降)

梯度下降的定义及作用

        梯度下降本身是一个最优化算法,通常也被称为最速下降法。常被用于机器学习和人工智能中递归性地逼近最小偏差模型,也就是使用它找到一个函数的局部极小值。

        使用过程中,梯度下降算法以函数上当前点对于梯度(或者是近似梯度)反方向的规定步长距离点进行迭代搜索。因此,它可以快速求解出某个函数的极小值或最小值。特别是对于n维问题求最优解,梯度下降法是最常用的方法之一。

#定义损失函数
cost = tf.reduce_mean(tf.square(Y - z))
#定义学习率
learning_rate = 0.01
#设置优化函数
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

        以上训练过程中,每次的正向传播后都会得到输出值与真实值的损失值,也就是cost,这个损失值越小,代表模型越好,而梯度下降的算法就用在这里,帮助寻找最小的那个损失值,从而反推出对应的学习参数b和w,从而达到优化模型的效果。

梯度下降算法的分类

        常用的梯度下降算法可以分为以下三种:

                ①批量梯度下降法

                        也称为Batch Gradient Descent,简称BGD。该方法每遍历全部数据集就算一次损失函数,然后算函数对各个参数的梯度和更新梯度。这种方法的缺点是每更新一次参数,都要把数据集里的所有样本遍历一遍,计算量大,计算速度慢,不支持在线学习

                ②随机梯度下降法

                        也称为Stochastic Gradient Descent,简称SGD。该方法每遍历一个数据就算一下损失函数,然后求梯度更新参数。这个方法速度比较快,但是收敛性能不太好,容易在最优点附近晃来晃去,命中不到最优点。两次参数的更新也有可能互相抵消,造成目标函数震荡比较剧烈

                ③小批量梯度下降法

                        也称为Mini-batch gradient descent,即小批的梯度下降,简称MBGD。该方法是为了克服上面两种方法的缺点,采取的一种折中方法。它把数据分为若干批,按批来更新参数,这样一批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为每批的样本数与整个数据集相比小了很多,计算量也不是很大

TensorFlow中的梯度下降函数

        在TensorFlow中,梯度下降优化函数有统一的优化器基类Optimizer。这个类定义了训练模型时与操作相关的API。

                ①tf.train.Optimizer.compute_gradients(loss,var_list = None,gate_gradients = 1,aggregation_method = None,colocate_gradients_with_ops = False,grad_loss = None)

                                该函数对var_list中的变量计算loss的梯度,返回一个以元组(gradient,variable)组成的列表。是函数minimize()的第一部分

                ②tf.train.Optimizer.apply_gradients(grads_and_vars,global_step = None,name = None)

                                该函数将计算出的梯度应用到变量上,返回一个应用指定的梯度操作Operation,对global_step做自增操作。是函数minimize()的第二部分。

                ③tf.train.Optimizer.minimize(loss,global_step = None,var_list = None,gate_gradients = 1,aggregation_method =None,colocate_gradients_with_ops = False,name = None,grad_loss = None)

                                该函数添加操作节点,用于最小化loss,并更新var_list。简单地合并了compute_gradients()与apply_gradients()函数,返回一个优化更新后的var_list。如果global_step非None,该操作还会为global_step做自增操作。

        实际训练过程中,不直接使用类Optimizer,而是使用它的子类,如GradientDescentOptimizer,AdagradOptimizer,MomentumOptimizer等。不同的子类,对应不同的算法。

                ①tf.train.GradientDescentOptimizer(learning_rate,use_locking = False,name = GradientDescent)

                                该优化器是一个实现梯度下降算法的一般优化器类,用于构造一个新的梯度下降优化器实例。其中参数learning_rate是优化器将采用的学习速率,它可以是一个张量或一个浮点值。use_locking如果值为True,则使用锁进行更新操作。name是可选的,是应用梯度时创建的操作名称前缀,默认为"GradientDescent"。GradientDescentOptimizer的计算方法很简单,用学习率乘每个参数所对应的梯度来更新网络参数。

                ②tf.train.AdagradOptimizer(learning_rate,initial_accumulator_value = 0.1,use_locking = False,name = "Adagrad")

                                该函数构造一个使用"Adagrad"算法的优化器。其中参数initial_accumulator_value代表第一次训练时,分母梯度大小的初始值。name默认是"Adagrad"。AdagradOptimizer实际上属于自适应的梯度下降算法。其主要思想是,如果一个可学习的参数已经梯度下降了很多,则减缓其下降的速度,反之如果一个参数和初始化相比没有下降很多,则保证它有一个比较大的下降速度。

                ③tf.train.AdadeltaOptimizer(learning_rate = 0.001,rho = 0.95,epsilon = 1e-0.8,use_locking = False,name = "Adadelta")

                                该函数构造一个使用Adadelta算法的优化器,其中参数rho为衰减率,可以是一个张量或一个浮点值。epsilon是非常小的数,其为了防止在实现中除以零。name默认是"Adadelta",AdaDelta是google提出的一种对于AdaOptimizer的改进,也是一种自适应的优化器。

                ④tf.train.MomentumOptimizer(learning_rate,momentum,use_locking = False,name = "Momentum",use_nesterov = False)

                                该函数构造一个使用momentum算法的优化器。其中参数momentum是动量值的系数。参数use_nesterov用于设置是否使用nesterov版本的带动量的梯度下降。该函数是使用动量(Momentum)的随机梯度下降法(SGD),主要思想是引入一个积攒历史梯度信息动量来加速SGD。在计算一次梯度下降的同时,会考虑到上一次梯度下降的大小和方向。

                ⑤tf.train.AdamOptimizer(learning_rate = 0.001,beta1 = 0.9,beta2 = 0.999,epsilon = 1e-08,use_locking = False,name = "Adam")

                                该函数构造一个使用Adam算法的优化器。Adam即Adaptive Moment Estimation(自适应矩估计),是一个寻找全局最优点的优化算法,引入了二次梯度校正。其中参数beta1是一阶矩估计的指数衰减率,beta2是二阶矩估计的指数衰减率。

                ⑥tf.train.RMSPropOptimizer(learning_rate,decay = 0.9,momentum = 0.0,epsilon = 1e-10,use_locking = False,name = "RMSProp")

                                该函数构造一个使用RMSProp算法的优化器。其中参数decay控制历史梯度值的衰减速率。

如何选择优化器

        Adagrad,Adadelta,RMSProp,Adam都属于自适应学习率算法,适用于训练数据是稀疏的场景。其中,RMSProp是Adagrad算法的一个扩展,它处理的是急剧下降的学习率。而Adam在RMSProp的基础上增加了偏差校正(bias-correction)和动量(momentum)。

        随着梯度变得越来越稀疏,Adam的优化效果略优于RMSProp。RMSProp、Adadelta、Adam三个算法较为相似,在类似的情况下,效果也是相似的。比较上述四种算法,Adam是最好的选择,被应用得最为广泛。

        MomentumOptimizer属于动量优化法。引入动量主要解决SGD的两个问题 : 一是随机梯度的方法(引入的噪声);二是SGD在收敛过程中和正确梯度相比来回摆动比较大的问题。

相关文章:

TensorFlow入门(二十二、梯度下降)

梯度下降的定义及作用 梯度下降本身是一个最优化算法,通常也被称为最速下降法。常被用于机器学习和人工智能中递归性地逼近最小偏差模型,也就是使用它找到一个函数的局部极小值。 使用过程中,梯度下降算法以函数上当前点对于梯度(或者是近似梯度)反方向的规定步长距离点进行迭代…...

WPF中的多重绑定

MultiBinding 将会给后端传回一个数组, 其顺序为绑定的顺序. 例如: <DataGridMargin"10"AutoGenerateColumns"False"ItemsSource"{Binding Stu}"><DataGrid.Columns><DataGridTextColumn Binding"{Binding Id}" Header…...

区块链在游戏行业的应用

区块链技术在游戏行业有许多潜在的应用&#xff0c;它可以改变游戏开发、发行和玩家交互的方式。以下是区块链技术在游戏行业的一些主要应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.游戏资产…...

uniapp快速入门系列(4)- 微信小程序开发

第四章 微信小程序开发 4.1 微信小程序开发与uniapp的融合4.2 微信小程序API在uniapp中的使用4.3 微信小程序常见问题的解决方法问题1: 如何获取用户信息&#xff1f;问题2: 如何获取当前位置&#xff1f;问题3: 如何发送网络请求&#xff1f; 在本章中&#xff0c;我们将学习如…...

Kafka保证消息幂等以及解决方案

1、幂等的基本概念 幂等简单点讲&#xff0c;就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的&#xff0c;不会产生任何副作用。幂等分很多种&#xff0c;比如接口的幂等、消息的幂等&#xff0c;它是分布式系统设计时必须要考虑的一个方面。 查询操作(天然幂等…...

接口测试用例设计

接口测试...

wireshark抓rtp包,提取出H265裸流数

调试rtsp收发流时&#xff0c;经常会需要抓包以确认是网络问题还是程序问题还是其它问题。通过tcpdump或者wireshark抓到的包通常是rtp流&#xff0c;保存为.pcap格式文件后中&#xff0c;可通过wireshark进行解析&#xff0c;得出h264裸流&#xff0c;并保存为文件。 1.wires…...

Excel往Word复制表格时删除空格

1.背景 在编写文档&#xff0c;经常需要从Excel往Word里复制表格 但是复制过去的表格前面会出现空格&#xff08;缩进&#xff09; 再WPS中试了很多方法&#xff0c;终于摆脱了挨个删除的困扰 2. WPS排版中删除 选择表格菜单栏-选在【开始】-【排版】选择【更多段落处理】-【段…...

客户机操作系统已禁用 CPU。请关闭或重置虚拟机(解决)

解决&#xff1a; 关闭虚拟机进入设置点击处理器给虚拟化引擎两个勾上确认后重新即可...

UnityShaderLab —— 简单的流光shader

原理&#xff1a; 就是在原先的模型表面叠加一层可以流动的图片&#xff0c; 算法代码&#xff1a; float2 tex; tex float2(i.uv.x - _Time.x * _Speed,i.uv.y); fixed4 col0 tex2D(_Tex, tex)* _Strenth; fixed4 col1 tex2D(_MainTex, i.uv); return col0 col1; 这里…...

代理IP在保护跨境商家网络安全中的重要作用

在当前全球化的背景下&#xff0c;跨境电商成为一种重要的商业模式&#xff0c;越来越多的商家涌入国际市场&#xff0c;商家们通过互联网平台将商品远销国外&#xff0c;但网络安全风险随之而来。跨境商家因为需要处理大量的在线交易和产品数据&#xff0c;如果未能对这些敏感…...

2核4G服务器支持多少用户同时在线访问?卡不卡?

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;从CPU内存的角度&#xff0c;网站程序效…...

[Error]在Swift项目Build Settings的Preprocessor Macros中定义的宏无效的问题

问题 如图&#xff0c;在Build Settings -> Preprocessor Macros中添加了ISADEMO1。但在代码中判断无效&#xff0c;还是会输出“isn’t ADemo” #if ISADEMOprint("is ADemo") #elseprint("isnt ADemo") #endif解决 如图&#xff0c;要让Preproces…...

网格管理安全巡检系统—助企业全面安全检查

通过应用安全巡检管理系统&#xff0c;企业能更好地管理控制安全风险&#xff0c;保障员工生命安全和财产安全&#xff0c;避免出现各种危险隐患&#xff0c;帮助企业快速提高生产发展实力。 一、凡尔码搭建安全巡检系统的功能 1.巡检计划:帮助用户制定巡检计划&#xff0c;包括…...

【Java】replace替换方法

String 替换方法 replace() 方法用于将目标字符串中的指定字符&#xff08;串&#xff09;替换成新的字符&#xff08;串&#xff09;replaceFirst() 方法用于将目标字符串中匹配某正则表达式的第一个子字符串替换成新的字符串replaceAll() 方法用于将目标字符串中匹配某正则表…...

CentOS yum update

详情内容 CentOS yum update升级命令详解&#xff0c;包括yum check-update&#xff0c;yum update&#xff0c;yum install等升级安装命令详细使用方法。 1.列出所有可更新的软件清单 命令&#xff1a; yum check-update 2.安装所有更新软件 命令&#xff1a; yum updat…...

/etc/profile与~/.bash_profile的区别

/etc/profile和~/.bash_profile都是用于存储用户的配置文件的&#xff0c;但它们的作用范围和加载顺序有所不同。 /etc/profile是系统级的配置文件&#xff0c;它应用于所有用户。当用户登录时&#xff0c;系统会首先加载/etc/profile。这个文件存储了系统范围的环境变量、系统…...

vue+element实现电商商城礼品代发网,商品、订单管理

一、项目效果图 1.首页 2.登录 版本2&#xff1a; 3.注册 4.找回密码 5.立即下单 6.商品详情 7.个人中心-工作台 8.个人中心-订单列表 9.订单中心-包裹列表 10.个人中心-工单管理 11.我的钱包 12.实名认证 13.升级vip 14.个人中心-推广赚钱 二、关键源码 1.路由配置 impor…...

Python接口自动化-requests模块之post请求

一、源码解析 def post(url, dataNone, jsonNone, **kwargs):r"""Sends a POST request.:param url: URL for the new :class:Request object.:param data: (optional) Dictionary, list of tuples, bytes, or file-likeobject to send in the body of the :cl…...

DDoS检测防御实现方案

流量采集模式 通过分光器将流量直接镜像到攻击检测器&#xff0c;收包采用DPDK库。 当前整机流量、源IP信息、连接数 、连接内容(五元组等)的信息汇聚 当发生告警时采样原始数据包&#xff0c; 采用固定采样算法 基于检测对象的TCP syn ack psh ack established的个数、流量…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

高抗扰度汽车光耦合器的特性

晶台光电推出的125℃光耦合器系列产品&#xff08;包括KL357NU、KL3H7U和KL817U&#xff09;&#xff0c;专为高温环境下的汽车应用设计&#xff0c;具备以下核心优势和技术特点&#xff1a; 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计&#xff0c;确保在…...

Qt的学习(二)

1. 创建Hello Word 两种方式&#xff0c;实现helloworld&#xff1a; 1.通过图形化的方式&#xff0c;在界面上创建出一个控件&#xff0c;显示helloworld 2.通过纯代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c; 显示hello world&#xff1b; …...