Pytorch-SGD算法解析

这篇具有很好参考价值的文章主要介绍了Pytorch-SGD算法解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关注B站可以观看更多实战教学视频:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com)

SGD,即随机梯度下降(Stochastic Gradient Descent),是机器学习中用于优化目标函数的迭代方法,特别是在处理大数据集和在线学习场景中。与传统的批量梯度下降(Batch Gradient Descent)不同,SGD在每一步中仅使用一个样本来计算梯度并更新模型参数,这使得它在处理大规模数据集时更加高效。

SGD算法的基本步骤

  1. 初始化参数:选择初始参数值,可以是随机的或者基于一些先验知识。
  2. 随机选择样本:从数据集中随机选择一个样本。
  3. 计算梯度:计算损失函数关于当前参数的梯度。
  4. 更新参数:沿着负梯度方向更新参数。
  5. 重复:重复步骤2-4,直到满足停止条件(如达到预设的迭代次数或损失函数的改变小于某个阈值)。

SGD的Python代码示例:

python实现

假设我们要使用SGD来优化一个简单的线性回归模型。

import numpy as np  
  
# 目标函数(损失函数)和其梯度  
def loss_function(w, b, x, y):  
    return np.sum((y - (w * x + b)) ** 2) / len(x)  
  
def gradient_function(w, b, x, y):  
    dw = -2 * np.sum((y - (w * x + b)) * x) / len(x)  
    db = -2 * np.sum(y - (w * x + b)) / len(x)  
    return dw, db  
  
# SGD算法  
def sgd(x, y, learning_rate=0.01, epochs=1000):  
    # 初始化参数  
    w = np.random.rand()  
    b = np.random.rand()  
      
    # 存储每次迭代的损失值,用于可视化  
    losses = []  
      
    for i in range(epochs):  
        # 随机选择一个样本(在这个示例中,我们没有实际进行随机选择,而是使用了整个数据集。在大数据集上,你应该随机选择一个样本或小批量样本。)  
        # 注意:为了简化示例,这里我们实际上使用的是批量梯度下降。在真正的SGD中,你应该在这里随机选择一个样本。  
          
        # 计算梯度  
        dw, db = gradient_function(w, b, x, y)  
          
        # 更新参数  
        w = w - learning_rate * dw  
        b = b - learning_rate * db  
          
        # 记录损失值  
        loss = loss_function(w, b, x, y)  
        losses.append(loss)  
          
        # 每隔一段时间打印损失值(可选)  
        if i % 100 == 0:  
            print(f"Epoch {i}, Loss: {loss}")  
      
    return w, b, losses  
  
# 示例数据(你可以替换为自己的数据)  
x = np.array([1, 2, 3, 4, 5])  
y = np.array([2, 4, 6, 8, 10])  
  
# 运行SGD算法  
w, b, losses = sgd(x, y)  
print(f"Optimized parameters: w = {w}, b = {b}")

解析

  • 在上面的代码中,我们首先定义了损失函数和它的梯度。对于线性回归,损失函数通常是均方误差。
  • sgd函数实现了SGD算法。它接受输入数据x和标签y,以及学习率和迭代次数作为参数。
  • 在每次迭代中,我们计算损失函数关于参数wb的梯度,并使用这些梯度来更新参数。
  • 我们还记录了每次迭代的损失值,以便稍后可视化算法的收敛情况。
  • 最后,我们打印出优化后的参数值。在实际应用中,你可能还需要使用这些参数来对新数据进行预测。

在PyTorch中,SGD(随机梯度下降)是一种基本的优化器,用于调整模型的参数以最小化损失函数。下面是torch.optim.SGD的参数解析和一个简单的用例。

SGD的Pytorch代码示例:

参数解析

torch.optim.SGD的主要参数如下:

  1. params (iterable):待优化的参数,或者是定义了参数的模型的迭代器。
  2. lr (float):学习率。这是更新参数的步长大小。较小的值会导致更新更精细,而较大的值可能会导致训练过程不稳定。这是SGD优化器的一个关键参数。
  3. momentum (float, optional):动量因子 (default: 0)。该参数加速了SGD在相关方向上的收敛,并抑制了震荡。
  4. dampening (float, optional):动量的抑制因子 (default: 0)。增加此值可以减少动量的影响。在实际应用中,这个参数的使用较少。
  5. weight_decay (float, optional):权重衰减 (L2 penalty) (default: 0)。通过向损失函数添加与权重向量平方成比例的惩罚项,来防止过拟合。
  6. nesterov (bool, optional):是否使用Nesterov动量 (default: False)。Nesterov动量是标准动量方法的一个变种,它在计算梯度时使用了未来的近似位置。

用例

下面是一个使用SGD优化器的简单例子:

import torch  
import torch.nn as nn  
import torch.optim as optim  
  
# 定义一个简单的模型  
model = nn.Sequential(  
    nn.Linear(10, 5),  
    nn.ReLU(),  
    nn.Linear(5, 2),  
)  
  
# 定义损失函数  
criterion = nn.CrossEntropyLoss()  
  
# 定义优化器  
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9, weight_decay=0.001)  
  
# 假设有输入数据和目标  
input_data = torch.randn(1, 10)  
target = torch.tensor([1])  
  
# 训练循环(这里只展示了一次迭代)  
for epoch in range(1):  # 通常会有多个 epochs  
    # 前向传播  
    output = model(input_data)  
      
    # 计算损失  
    loss = criterion(output, target)  
      
    # 反向传播  
    optimizer.zero_grad()  # 清除之前的梯度  
    loss.backward()  # 计算当前梯度  
      
    # 更新参数  
    optimizer.step()  # 应用梯度更新  
  
    # 打印损失  
    print(f'Epoch {epoch+1}, Loss: {loss.item()}')

在这个例子中,我们创建了一个简单的两层神经网络模型,并使用SGD优化器来更新模型的参数。在训练循环中,我们执行了前向传播来计算模型的输出,然后计算了损失,通过调用loss.backward()执行了反向传播来计算梯度,最后通过调用optimizer.step()更新了模型的参数。在每次迭代开始时,我们使用optimizer.zero_grad()来清除之前累积的梯度,这是非常重要的步骤,因为PyTorch默认会累积梯度。文章来源地址https://www.toymoban.com/news/detail-826299.html

到了这里,关于Pytorch-SGD算法解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习&&深度学习——随机梯度下降算法(及其优化)

    在我们没有办法得到解析解的时候,我们可以用过梯度下降来进行优化,这种方法几乎可以所有深度学习模型。 关于优化的东西,我自己曾经研究过智能排班算法和优化,所以关于如何找局部最小值,以及如何跳出局部最小值的一些基本思想是有感触的,随机梯度算法和其优

    2024年02月15日
    浏览(33)
  • pytorch(二)梯度下降算法

    在线性模型训练的时候,一开始并不知道w的最优值是什么,可以使用一个随机值来作为w的初始值,使用一定的算法来对w进行更新 寻找使得目标函数最优的权重组合的问题就是优化问题 通俗的讲,梯度下降就是使得梯度往下降的方向,也就是负方向走。一般来说,梯度往正

    2024年01月21日
    浏览(25)
  • pytorch实现梯度下降算法例子

    如题,利用pytorch,通过代码实现机器学习中的梯度下降算法,求解如下方程: f ′ ( x , y ) = x 2 + 20 y 2 {f}\\\'(x,y) = x^2 + 20 y^2 f ′ ( x , y ) = x 2 + 20 y 2 的最小值。 Latex语法参考:https://blog.csdn.net/ViatorSun/article/details/82826664 输出结果: 最终结果为:(x,y,z)=(397.85867, 0.00000, 158291.51945),迭

    2024年02月15日
    浏览(29)
  • 【Sklearn】基于随机梯度下降算法的数据分类预测(Excel可直接替换数据)

    随机梯度下降(Stochastic Gradient Descent,SGD)是一种优化算法,用于训练模型的参数以最小化损失函数。在分类任务中,SGD也可以用于训练分类模型。下面是SGD分类预测的模型原理和数学公式的概述。 模型原理 SGD分类器是基于线性模型的分类器,它使用随机梯度下降优化算法

    2024年02月12日
    浏览(25)
  • 机器学习:基于梯度下降算法的线性拟合实现和原理解析

    当我们需要寻找数据中的趋势、模式或关系时,线性拟合和梯度下降是两个强大的工具。这两个概念在统计学、机器学习和数据科学领域都起着关键作用。本篇博客将介绍线性拟合和梯度下降的基本原理,以及它们在实际问题中的应用。 线性拟合是一种用于找到数据集中线性

    2024年02月10日
    浏览(24)
  • 机器学习:基于梯度下降算法的逻辑回归实现和原理解析

    当涉及到二元分类问题时,逻辑回归是一种常用的机器学习算法。它不仅简单而且有效,通常是入门机器学习领域的第一步。本文将介绍逻辑回归的基本概念、原理、应用场景和代码示例。 逻辑回归是一种用于解决二元分类问题的统计学习方法。尽管其名称中包含\\\"回归\\\"一词

    2024年02月09日
    浏览(41)
  • YOLO系列 --- YOLOV7算法(四):YOLO V7算法网络结构解析

    今天来讲讲YOLO V7算法网络结构吧~ 在 train.py 中大概95行的地方开始创建网络,如下图(YOLO V7下载的时间不同,可能代码有少许的改动,所以行数跟我不一定一样) 我们进去发现,其实就是在 yolo.py 里面。后期,我们就会发现相关的网络结构都是在该py文件里面。这篇blog就主

    2024年02月05日
    浏览(33)
  • python pytorch 纯算法实现前馈神经网络训练(数据集随机生成)-续

    上一次的代码博主看了,有两个小问题其实,一个是,SGD优化的时候,那个梯度应该初始化为0,还一个是我并没有用到随机生成batch。 博主修改了代码,并且加入了accuracy图像绘制的代码。代码如下: 可一下跑出的结果: 可以看到这样看下来,效果就很不错了。

    2024年02月13日
    浏览(30)
  • 机器学习算法:线性回归、逻辑回归、决策树和随机森林解析

    引言 机器学习算法是人工智能领域的核心,它们用于解决各种问题,从预测房价到图像分类。本博客将深入探讨四种常见的机器学习算法:线性回归、逻辑回归、决策树和随机森林。 线性回归 什么是线性回归? 线性回归是一种用于建立连续数值输出的机器学习模型的算法。

    2024年02月10日
    浏览(41)
  • 机器学习--决策树、线性模型、随机梯度下降

    🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+    目录  一、决策树 二、线性模型 三、随机梯度下降 决策树(decision

    2024年02月03日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包