提问人:Ahmed Gado 提问时间:8/26/2023 最后编辑:molbdniloAhmed Gado 更新时间:8/26/2023 访问量:17
pytroch 中的反向传播是如何完成的?何时使用torch.no_grad,以及何时何地计算梯度?
How is the backward propagation is done in pytroch? When to use torch.no_grad, also when and where is the gradinte calcuated?
问:
我在 pytorch 中有这个训练循环。和loss_fn = nn.CrossEntropyLoss()
optim = torch.optim.Adam(net.parameters(), lr=lr)
for X, y in train_dataloader:
X = X.to(device)
y = y.to(device)
optim.zero_grad()
pred = net(X)
loss = loss_fn(pred, y)
train_loss += loss.item() * X.size(0)
pred = torch.argmax(pred, dim= -1)
train_correct += (pred == y).float().sum()
with torch.no_grad():
loss.backward()
optim.step()
现在它工作正常,模型运行良好,并获得 0.99 的精度。
我的问题是,如果无法计算可训练权重的梯度,为什么会起作用。如果没有,它将是完全相同的训练循环,并可能输出相同的输出。我知道这不会改变渐变,对吧?但从权重中减去梯度。那么为什么要使用.loss.backward()
with torch.no_grad
with torch.no_grad()
optim.step()
with torch.no_grad
答: 暂无答案
评论