一起来学PyTorch——torch.nn优化器optim

article/2025/9/16 20:31:57

在学习的过程中,大家可能会感觉很蒙,其实现在做的就是看懂每一个小内容,等之后做一个具体的项目,就可以串联起来了。

优化器用于优化模型,加速收敛。

  1. SGD方法

随机梯度下降法,是指沿着梯度下降的方向求解极小值,一般可用于求解最小二乘问题。

其中代表了参数的梯度,代表了学习率,代表了参数更新的幅度。

优点:

每次采用的数据量小,会有更多次梯度更新。

缺点:

一开始的学习率不好确定,容易出现局部最优解。

  1. Adama方法

利用梯度的一阶矩和二阶矩动态的估计调整每一个参数的学习率。

  1. 三层感知机例子-介绍基本的优化过程

from torch import nn
# 先定义一个三层感知机,激活函数使用Relu(小于0的,都转换为0)
class MLP(nn.Module):def __init__(self, in_dim, hid_dim1, hid_dim2, out_dim):super(MLP, self).__init__()#使用Sequential快速搭建三层感知机self.layer = nn.Sequential(# 第一层nn.Linear(in_dim, hid_dim1),nn.Relu(),# 第二层nn.Linear(hid_dim1, hid_dim2),nn.Relu(),# 第三层nn.Linear(hid_dim2, out_dim),nn.Relu())def forward(self, x):y = self.layer(x)return y# 进行模型的实例化
from torch import optim
from torch import nn
# 输入数据为28*28
# 隐藏层中:第一层需输入300个数据,第二层需输入200个数据
# 最后输出10个特征
model = MLP(28*28, 300, 200, 10)
# modeld的结构
#MLP(
#  (layer):Sequention(
#       (0):Linear(in_features=784, out_features=300, bias=True)   
#       (1):Relu()
#       (2):Linear(in_features=300, out_features=200, bias=True)
#       (3):Relu()
#       (4):Linear(in_features=200, out_features=10, bias=True)
#       (5):Relu()
#  )
#)
# 采用SGD优化器, 学习率设为0.01
optimizer = optim.SGD(params = model.parameters(), lr=0.01)
# 设置输出数据
data = torch.randn(10, 28*28)
# 输入模型后,输出数据
output = model(data)
# 因为最终输出10个特征,所以先设置10个特征
label = torch.Tensor([1, 0, 4, 7, 9, 3, 4, 5, 3, 2]).long()
# 求损失
criterion = nn.CrossEntropyLoss()
loss = criterion(output, label)# >>> loss# tensor(2.2762)
# 清空梯度,在每次优化前都要进行此操作
optimizer.zero_grad()
# 损失的反向传播
loss.backward()
# 利用优化器进行梯度更新
optimizer.step()

大家只需要理解这些函数的功能就可以,之后我们会在详细的项目中,把这些功能应用起来。欢迎大家讨论!共同学习!


http://chatgpt.dhexx.cn/article/x6L3F3yH.shtml

相关文章

Pytorch之Optim(优化器)

使用优化器,接收损失函数的结果,并调整网络参数,完成反向传播 根据示例 optimizer torch.optim.SGD(module.parameters(), lr0.01, momentum0.9) 然后根据提示,清空梯度>网络前传>计算损失>反向传播>优化网络参数 在运行区域引入库和之前的Module if __name__ …

torch.optim

torch.optim是一个实现了各种优化算法的库。 1. 如何使用optimizer 我们需要构建一个optimizer对象。这个对象能够保持当前参数状态并基于计算得到的梯度进行参数更新。 1.1 构建 为了构建一个Optimizer,你需要给它一个包含了需要优化的参数(必须都是…

torch.optim.lr_scheduler.CosineAnnealingWarmRestarts、OneCycleLR定义与使用

torch中有多种余弦退火学习率调整方法,包括:OneCycleLR、CosineAnnealingLR和CosineAnnealingWarmRestarts。 CosineAnnealingWarmRestarts(带预热的余弦退火)学习率方法定义 torch.optim.lr_scheduler.CosineAnnealingWarmRest…

torch.optim优化算法理解之optim.Adam()

torch.optim是一个实现了多种优化算法的包,大多数通用的方法都已支持,提供了丰富的接口调用,未来更多精炼的优化算法也将整合进来。 为了使用torch.optim,需先构造一个优化器对象Optimizer,用来保存当前的状态&#x…

Python-torch.optim优化算法理解之optim.Adam()

目录 简介 分析 使用 Adam算法 参数 论文理解 torch.optim.adam源码理解 Adam的特点 转载torch.optim优化算法理解之optim.Adam() 官方手册:torch.optim — PyTorch 1.11.0 documentation 其他参考 pytorch中优化器与学习率衰减方法总结 Adam和学习率衰减…

R 语言 optim 使用

stats中的optim函数是解决优化问题的一个简易的方法。 Univariate Optimization f function(x,a) (x-a)^2 xmin optimize(f,interval c(0,1),a1/3) xminGeneral Optimization optim函数包含了几种不同的算法。 算法的选择依赖于求解导数的难易程度,通常最好提…

PyTorch基础(六)-- optim模块

PyTorch的optim是用于参数优化的库(可以说是花式梯度下降),optim文件夹主要包括1个核心的父类(optimizer)、1个辅助类(lr_scheduler)以及10个常用优化算法的实现类。optim中内置的常用算法包括a…

pytorch基础(四):使用optim优化函数

文章目录 前言一、问题描述二、官方文档代码三、optimizer的工作原理总结 前言 本系列主要是对pytorch基础知识学习的一个记录,尽量保持博客的更新进度和自己的学习进度。本人也处于学习阶段,博客中涉及到的知识可能存在某些问题,希望大家批评…

HTTP协议之GET与POST区别

GET和POST是HTTP请求的两种基本方式,对于这两种请求方式的区别,只要是接触过Web开发的就能说出一二:GET把参数包含在URL中,POST通过正文传参! 而我想深入了解以下的时候,就去了w3cschool,这是w…

Get和Post区别是什么

附上原文地址:https://www.cnblogs.com/logsharing/p/8448446.html GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。…

get与post区别(很全~)

get与post区别 GET: (1)从指定的资源请求数据 (2)请求数据有长度限制(不同每个浏览器限制长度可能不一样) (3)请求url会在浏览器地址栏中显示 (4&#x…

Web中get和post区别

99% 的人都理解错了 HTTP 中 GET 与 POST 的区别(转) 转自:WebTechGarden 微信公众号GET 和 POST 是 HTTP 请求的两种基本方法,要说它们的区别,接触过 WEB 开发的人都能说出一二。最直观的区别就是 GET 把参数包含在 U…

get,post区别

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而H…

GET 与 POST 区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出…

GET和POST区别及缓存问题

2.就是get和post区别的缓存问题。 首先要了解什么是缓存。 HTTP缓存的基本目的就是使应用执行的更快,更易扩展,但是HTTP缓存通常只适用于idempotent request(可以理解为查询请求,也就是不更新服务端数据的请求)&#x…

Get与Post区别与范例讲解

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka 一、 J2EE WEB应用文件目录结构 Java Web应用由一组静态HTML页、Servlet、JSP和其他相关的class组成,它们一起构成一个大的工程项目。每种组件在Web应用中都有固定的存放目录。Web应用的配…

GET和POST区别详解

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出…

get和post区别

GET和POST的安全性 1、GET是通过URL方式请求,可以直接看到,明文传输 2、POST是通过请求header请求,可以开发者工具或者抓包可以看到,同样也是明文的 3、GET请求会保存在浏览器历史纪录中,还可能会保存在Web的日志中 G…

post和get区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出…

GET 和 POST 有什么区别?

GET 和 POST 是 HTTP 请求中最常用的两种请求方法,在日常开发的 RESTful 接口中,都能看到它们的身影。而它们之间的区别,也是一道常见且经典的面试题,所以我们本文就来详细的聊聊。 HTTP 协议定义的方法类型总共有以下 10 种&…