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…...

区块链在游戏行业的应用
区块链技术在游戏行业有许多潜在的应用,它可以改变游戏开发、发行和玩家交互的方式。以下是区块链技术在游戏行业的一些主要应用,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.游戏资产…...
uniapp快速入门系列(4)- 微信小程序开发
第四章 微信小程序开发 4.1 微信小程序开发与uniapp的融合4.2 微信小程序API在uniapp中的使用4.3 微信小程序常见问题的解决方法问题1: 如何获取用户信息?问题2: 如何获取当前位置?问题3: 如何发送网络请求? 在本章中,我们将学习如…...

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

接口测试用例设计
接口测试...

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

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

客户机操作系统已禁用 CPU。请关闭或重置虚拟机(解决)
解决: 关闭虚拟机进入设置点击处理器给虚拟化引擎两个勾上确认后重新即可...

UnityShaderLab —— 简单的流光shader
原理: 就是在原先的模型表面叠加一层可以流动的图片, 算法代码: 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在保护跨境商家网络安全中的重要作用
在当前全球化的背景下,跨境电商成为一种重要的商业模式,越来越多的商家涌入国际市场,商家们通过互联网平台将商品远销国外,但网络安全风险随之而来。跨境商家因为需要处理大量的在线交易和产品数据,如果未能对这些敏感…...

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

[Error]在Swift项目Build Settings的Preprocessor Macros中定义的宏无效的问题
问题 如图,在Build Settings -> Preprocessor Macros中添加了ISADEMO1。但在代码中判断无效,还是会输出“isn’t ADemo” #if ISADEMOprint("is ADemo") #elseprint("isnt ADemo") #endif解决 如图,要让Preproces…...

网格管理安全巡检系统—助企业全面安全检查
通过应用安全巡检管理系统,企业能更好地管理控制安全风险,保障员工生命安全和财产安全,避免出现各种危险隐患,帮助企业快速提高生产发展实力。 一、凡尔码搭建安全巡检系统的功能 1.巡检计划:帮助用户制定巡检计划,包括…...
【Java】replace替换方法
String 替换方法 replace() 方法用于将目标字符串中的指定字符(串)替换成新的字符(串)replaceFirst() 方法用于将目标字符串中匹配某正则表达式的第一个子字符串替换成新的字符串replaceAll() 方法用于将目标字符串中匹配某正则表…...
CentOS yum update
详情内容 CentOS yum update升级命令详解,包括yum check-update,yum update,yum install等升级安装命令详细使用方法。 1.列出所有可更新的软件清单 命令: yum check-update 2.安装所有更新软件 命令: yum updat…...
/etc/profile与~/.bash_profile的区别
/etc/profile和~/.bash_profile都是用于存储用户的配置文件的,但它们的作用范围和加载顺序有所不同。 /etc/profile是系统级的配置文件,它应用于所有用户。当用户登录时,系统会首先加载/etc/profile。这个文件存储了系统范围的环境变量、系统…...

vue+element实现电商商城礼品代发网,商品、订单管理
一、项目效果图 1.首页 2.登录 版本2: 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检测防御实现方案
流量采集模式 通过分光器将流量直接镜像到攻击检测器,收包采用DPDK库。 当前整机流量、源IP信息、连接数 、连接内容(五元组等)的信息汇聚 当发生告警时采样原始数据包, 采用固定采样算法 基于检测对象的TCP syn ack psh ack established的个数、流量…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...