我正在尝试比较神经网络的 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)
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
我对优化器的理解是,SGD 优化器实际上执行小批量梯度下降算法,因为我们一次向优化器提供一批数据。因此,如果我们将batch_size参数设置为所有数据的大小,代码实际上会对神经网络进行梯度下降。
我的理解正确吗?