我正在努力比较神经网络的SGD和GD算法的收敛速度.在PyTorch中,我们经常使用SGD优化器,如下所示.

train_dataloader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
for epoch in range(epochs):
    running_loss = 0

    for input_batch, labels_batch in train_dataloader:

        input = input_batch

        y_hat = model(input)
        y = labels_batch
        L = loss(y_hat, y)
        
        optimizer.zero_grad()
        L.backward()
        
        optimizer.step()
        
        running_loss += L.item()

我对优化器的理解是,SGD优化器实际上执行小批量梯度下降算法,因为我们一次向优化器提供一批数据.因此,如果我们将batch_size参数设置为所有数据的大小,代码实际上会对神经网络进行梯度下降.

我的理解正确吗?

推荐答案

你的理解是正确的.SGD只是基于反向传播计算的梯度更新权重.因此,它执行的梯度下降的风格由数据加载器决定.

  • Gradient descent(又名批梯度下降):批大小等于整个训练数据集的大小.
  • Stochastic gradient descent:批量大小等于1和shuffle=True.
  • Mini-batch gradient descent:任何其他批量和shuffle=True.到目前为止,在实际应用中最为常见.

Python相关问答推荐

Python(Polars):使用之前的变量确定当前解决方案的Vector化操作

Tokenizer Docker:无法为Tokenizer构建轮子,这是安装pyproject.toml项目所需的

从包含基本数据描述的文本字段中识别和检索特定字符序列

回归回溯-2D数组中的单词搜索

Python:MultiIndex Dataframe到类似json的字典列表

PyTorch卷积自动编码器,输出维度与输入不同

如何在Python中按组应用简单的线性回归?

了解shuffle在NP.random.Generator.choice()中的作用

从包含数字和单词的文件中读取和获取数据集

Odoo 14 hr. emergency.public内的二进制字段

Pytest两个具有无限循环和await命令的Deliverc函数

如何让剧作家等待Python中出现特定cookie(然后返回它)?

使用miniconda创建环境的问题

从dict的列中分钟

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

如何指定列数据类型

合并帧,但不按合并键排序

python中csv. Dictreader. fieldname的类型是什么?'

从列表中获取n个元素,其中list [i][0]== value''

Python避免mypy在相互引用中从另一个类重定义类时失败