pytorch与随机梯度下降

1、梯度的概念

  • 偏导数 :函数在某一点某方向的变化率
    是一个标量,给定一个方向后,得到这个方向的变化率大小 在这里插入图片描述
  • 梯度:某一点的梯度是这个点各个方向的偏导数组成的一个向量

梯度的意义

大小代表变化率,方向指向函数增长的方向。
在这里插入图片描述
更新参数的公式:每次减去梯度大小来求取目标函数的最小值:
在这里插入图片描述

凸函数、局部最小

类似一个碗的形状(二维视角)凸函数总可以找到一个全局最优解。
在这里插入图片描述
现实中遇到的函数却一般是这样的:
这是loss关于很多参数三维可视化后的结果。由于有很多局部最小解,较难找到全局最小解。
在这里插入图片描述

鞍点(saddle point)

在某一点取到一个方向的局部最大值,但同时取到另一个方向的局部最小值。
在这里插入图片描述

影响优化性能的其他因素

  • 初始值大小
    在这里插入图片描述
  • 学习率大小
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch实现随机梯度下降(SGD)的方式是通过optim包中的SGD优化器。具体来说,可以按照以下步骤实现随机梯度下降: 1. 导入必要的库函数 ```python import torch import torch.optim as optim ``` 2. 定义模型和损失函数 ```python model = YourModel() loss_fn = YourLossFunction() ``` 3. 定义优化器 ```python optimizer = optim.SGD(model.parameters(), lr=learning_rate) ``` 其中,`model.parameters()`表示获取模型中的所有可训练参数,`lr`表示学习率。 4. 进行训练 ```python for epoch in range(num_epochs): for batch_idx, (data, target) in enumerate(train_loader): optimizer.zero_grad() # 每个batch之前需要将梯度清零 output = model(data) loss = loss_fn(output, target) loss.backward() optimizer.step() ``` 其中,`train_loader`表示数据集的数据加载器,`optimizer.zero_grad()`表示清除梯度,`loss.backward()`表示计算损失函数的梯度,`optimizer.step()`表示更新模型参数。 5. 在测试集上进行测试 ```python model.eval() with torch.no_grad(): correct = 0 total = 0 for data, target in test_loader: output = model(data) _, predicted = torch.max(output.data, 1) total += target.size(0) correct += (predicted == target).sum().item() print('Accuracy of the network on the test images: %d %%' % (100 * correct / total)) ``` 其中,`model.eval()`表示将模型切换为测试模式,`torch.no_grad()`表示关闭梯度计算,`torch.max()`表示获取输出张量中最大值的索引。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值