当前位置: 首页 > 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的个数、流量…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...