通常,学习周期包含:
optim.zero_grad()
loss(m, op).backward()
optim.step()
但是数据不适合显示卡的周期应该是什么?
第一个选项:
for ip, op in DataLoader(TensorDataset(inputs, outputs),
batch_size=int(1e4), pin_memory=True):
m = model(ip.to(dev))
op = op.to(dev)
optim.zero_grad()
loss(m, op).backward()
optim.step()
第二个选项:
optim.zero_grad()
for ip, op in DataLoader(TensorDataset(inputs, outputs),
batch_size=int(1e4), pin_memory=True):
m = model(ip.to(dev))
op = op.to(dev)
loss(m, op).backward()
optim.step()
第三个选项: 调用向后()后累积渐变。
答案 0 :(得分:0)
第一个选项是正确的,并且与批量梯度下降相对应。
第二个选项将不起作用,因为m
和op
在每一步都将被覆盖,因此您的优化器步骤将仅对应于基于最终批次的优化。
答案 1 :(得分:0)
使用Stochastic Gradient Descent (SGD)训练模型的正确方法是遵循以下步骤:
batch_size
。这是代码的外观
model = MyModel(...) # instantiate a model once
dl = DataLoader(TensorDataset(inputs, outputs), batch_size=int(1e4), pin_memory=True)
for ei in range(num_epochs):
for ip, op in dl:
optim.zero_grad()
predict = model(ip.to(dev)) # forward pass
loss = criterion(predict, op.to(dev)) # estimate current loss
loss.backward() # backward pass - propagate gradients
optim.step() # update the weights based on current batch
请注意,在训练过程中,您会在整个训练集中进行多次迭代。每个这样的迭代通常称为“时代”。