6

如果我提供整个数据并且不指定批量大小,pytorch SGD 会做什么?在这个案例中,我没有看到任何“随机性”或“随机性”。例如,在下面的简单代码中,我将整个数据(x,y)输入到模型中。

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)  
for epoch in range(5):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

假设有 100 个数据对,(x,y)即每个数据对有 100 个元素。x_datay_data

问题:在我看来,所有 100 个梯度都是在一次参数更新之前计算的。“mini_batch”的大小是 100,而不是 1。所以没有随机性,对吗?起初,我认为 SGD 的意思是随机选择 1 个数据点并计算其梯度,这将用作所有数据中真实梯度的近似值。

4

1 回答 1

7

PyTorch 中的 SGD 优化器只是梯度下降。随机部分来自您通常一次通过网络传递数据的随机子集的方式(即小批量或批量)。您发布的代码在执行反向传播和步进优化器之前在每个 epoch 传递整个数据集,因此您实际上只是在进行常规梯度下降。

于 2020-02-05T04:49:22.093 回答