如果我提供整个数据并且不指定批量大小,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()
Run Code Online (Sandbox Code Playgroud)
假设有100个数据对(x,y),即,x_data和y_data每个都具有100个元素。
问题:在我看来,所有 100 个梯度都是在一次参数更新之前计算出来的。“mini_batch”的大小是 100,而不是 1。所以没有随机性,对吗?起初,我认为 SGD 意味着随机选择 1 个数据点并计算其梯度,这将用作所有数据中真实梯度的近似值。
machine-learning gradient-descent deep-learning pytorch stochastic-gradient