优化器:torch.optimizer
优化器:对参数进行调整,降低误差减小损失
torch.optimizer
parameters(模型参数),lr(float)–>(学习速率)
代码:
import torch
import torchvision.datasets
from torch import nn
from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear, CrossEntropyLoss
from torch.utils.data import DataLoader# 加载数据集,转换成tensor类型
dataset = torchvision.datasets.CIFAR10(root="./dataset_ts",train=False, download=True,transform=torchvision.transforms.ToTensor())
dataloader = DataLoader(dataset, batch_size=1)# 创建网络
class Tui(nn.Module):def __init__(self):super(Tui, self).__init__()self.model1 = Sequential(Conv2d(3, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 64, 5, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self, x):x = self.model1(x)return x#定义计算loss
loss = CrossEntropyLoss()tui = Tui()
# 设置优化器
optim = torch.optim.SGD(tui.parameters(), lr=0.01)for epoch in range(20):running_loss = 0.0for data in dataloader:imgs, targets = dataoutputs = tui(imgs)result_loss = loss(outputs, targets)#计算数据集经过神经网络后的输出和真实数据输出之间的误差optim.zero_grad()# 梯度清零————要把网络模型当中每一个 调节 参数梯度 调为0,参数清零result_loss.backward()# 反向传播求解梯度————调用存损失函数的反向传播,求出每个节点的梯度,optim.step()# 更新权重参数————调用优化器,对每个参数进行调优,循环running_loss = running_loss + result_loss#对整体损失的求和print(running_loss)
运行结果:
总得来说,这三个函数的作用是:
先将梯度值归零,:optimizer.zero_grad()
;
然后反向传播计算得到每个参数的梯度值:loss.backward()
;
最后通过梯度下降执行一步参数更新:optimizer.step()
;
由于pytorch的动态计算图,当我们使用loss.backward()和opimizer.step()进行梯度下降更新参数的时候,梯度并不会自动清零。并且这两个操作是独立操作。
基于以上几点,正好说明了pytorch的一个特点是每一步都是独立功能的操作,因此也就有需要梯度清零的说法,如若不显示的进行optimizer.zero_grad()这一步操作,backward()的时候就会累加梯度,也就有了梯度累加这种trick。
参考:
小土堆-优化器
https://blog.csdn.net/Crystalxxtt/article/details/124928155
https://blog.csdn.net/u013250861/article/details/120572718
优化器:torch.optimizer相关推荐
- 使用优化器提示(Optimizer Hints)
优化器提示(Optimizer Hints)可以用在SQL语句中改变执行计划. 理解优化器提示 提示让你作出决定,这决定一般由优化器来作出.作为一个应用的设计者,你知道一些优化器不知道的关于你的数据的 ...
- 倭黑猩猩优化器(Bonobo Optimizer, BO)
文章目录 一.理论基础 1.数学模型 1.1 非用户定义的参数 1.2 正相(PP)和负相(NP) 1.3 分裂-融合社会策略选择倭黑猩猩 1.4 基于不同交配策略创造新的倭黑猩猩 1.4.1 混杂和 ...
- 堆优化器(Heap-Based Optimizer, HBO)
文章目录 一.理论基础 二.数学模型 2.1 公司等级制度 2.2 与直属上司的互动 2.3 同事之间的互动 2.4 员工的自我贡献 2.5 联合公式 三.算法伪代码 四.总结 参考文献 一.理论基础 ...
- 海马优化器(Sea-Horse Optimizer, SHO)
文章目录 一.理论基础 1.数学模型 1.1 海马的运动行为 1.2 海马的捕食行为 1.3 海马的繁殖行为 2.算法伪代码 二.仿真实验与结果分析 1.标准函数测试 2.工程问题测试 三.总结 参考 ...
- TensorFlow(四)优化器函数Optimizer
因为大多数机器学习任务就是最小化损失,在损失定义的情况下,后面的工作就交给了优化器.因为深度学习常见的是对于梯度的优化,也就是说,优化器最后其实就是各种对于梯度下降算法的优化. 常用的optimize ...
- Tensorflow 优化器(optimizer)
所谓的优化器,就是tensorflow中梯度下降的策略,用于更新神经网络中数以百万的参数.工程师们除了在不断的推出新的神经网络的结构以外,还在不断的推出新的参数更新的策略,在这篇博客中,我们就列举te ...
- Oracle - 优化器(Optimizer)- 01概念
Oracle里的优化器 Oracle市场占有率近50%,是使用范围最广的关系型数据库(RDBMS) 对于关系型数据库的应用系统而言,SQL语句的好坏会直接影响系统的性能,很多系统性能很差最后发现都是因 ...
- 【源码】均衡优化器Equilibrium Optimizer(EO)
EO是受控制体积质量平衡的启发来估计动态和平衡状态的. EO is inspired by control volume mass balance to estimate both dynamic a ...
- 深度学习中常用优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)
本文转载自:https://www.cnblogs.com/guoyaohua/p/8542554.html 在机器学习.深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagr ...
- 深度学习基础之优化器(optimizer)的介绍
文章目录 前言 SGD(随机梯度下降法) Momentum AdaGrad RMSprop Adam MNIST手写数据集四种方法对比 总结 参考 前言 神经网络的学习的目的是找到使损失函数的值尽可能 ...
最新文章
- DataFrame类型数据的主要处理方法
- C#正则表达式提取文本中以逗号间隔的数据
- 可逆加密算法 php,php可逆加密的方法及原理
- 内卷严重?加班多?给几条程序员都适用的建议
- 【知识小课堂】mongodb 之 查询关键词使用
- 2021年全球营销趋势报告
- Impala如何支持array<string> 解决问题
- linux cpp建立文件夹,Linux小知识之CMake创建工程的一般流程
- 很值得学习的java 画图板源码
- 【语音处理】基于matlab噪声信号功率谱【含Matlab源码 1712期】
- 火车票_ _购买卧铺下铺的总结
- 在Ubuntu22.04中安装微信、QQ
- 补丁(patch)的制作与应用
- 微信小程序 - 公农历通用时间选择器组件
- TDengine 入门教程⑧——数据库管理工具 | DBeaver 连接 TDengine
- 网络传输协议原理透析
- 剑指 Offer II 080. 含有 k 个元素的组合
- c++计算二维数组的鞍点
- aurora(极光) vpn查看代理ip和端口
- 学习推荐:PS爱好者和设计师常看这些网站,实现自我提升
热门文章
- 【读书笔记】商业自传-耐克科技,鞋狗:耐克创始人菲尔.奈特亲笔自传_2020.06.01
- js清除cookie有时无法清除
- GAN 生成对抗网络(一)
- 首批最佳骑行路线揭晓
- ntohs, ntohl, htons,htonl inet_aton等详解
- linux用命令下载图片,Linux命令行中采集指定页面的图片地址及图片下载
- canal1.1.5 配置kaka
- Lenovo k860i 移植Android 4.4 cm11进度记录【下篇--实时更新中】
- 全球与中国便携式USB摄像机市场现状及未来发展趋势(2022)
- 福建力得温控器_福建力得干变温控器LD-B10-10D、LD-B10-10F、LD-B10-10E系列高精度变压器温度控制器...