gpt4 book ai didi

使用小批量时累积的 pytorch 损失

转载 作者:行者123 更新时间:2023-12-04 07:55:35 31 4
gpt4 key购买 nike

我是pytorch的新手。请问添加'loss.item()'有什么区别?以下2部分代码:

for epoch in range(epochs):
trainingloss =0
for i in range(0,X.size()[1], batch_size):
indices = permutation[i:i+batch_size]
F = model.forward(X[n])
optimizer.zero_grad()
criterion = loss(X,n)
criterion.backward()
optimizer.step()
trainingloss += criterion.item()
还有这个
for epoch in range(epochs):
for i in range(0,X.size()[1], batch_size):
indices = permutation[i:i+batch_size]
F = model.forward(X[n])
optimizer.zero_grad()
criterion = loss(X,n)
criterion.backward()
optimizer.step()
如果有人有任何想法,请提供帮助。非常感谢你。

最佳答案

调用loss.item()允许您采取loss与 PyTorch 创建的计算图分离的变量(这是 .item() 对 PyTorch 变量所做的)。
如果添加行 trainingloss += criterion.item()在每个“批量循环”结束时,这将通过增量添加训练集中每个小批量的损失来跟踪整个迭代过程中的批量损失。这是必要的,因为您使用的是小批量 - 每个小批量的损失将不等于所有批处理的损失。
备注 :如果您在优化循环之外使用 PyTorch 变量,例如在不同的范围内,如果您调用类似 return loss 的内容,可能会发生这种情况,请务必调用 .item()在作为计算图一部分的任何 PyTorch 变量上(作为一般经验法则,与 PyTorch 方法交互的任何输出/损失/模型都可能是计算图的一部分)。如果没有,这可能会导致计算图无法从 Python 内存中取消分配/删除,并可能导致 CPU/GPU 内存泄漏。不过,您上面的内容看起来是正确的!
此外,在 future ,PyTorch 的 DataLoader 类可以帮助您使用较少样板代码的小批量 - 它可以循环您的数据集,以便您循环的每个项目都是一个训练批处理 - 即您在优化中不需要两个 for 循环。
我希望你喜欢学习/使用 PyTorch!

关于使用小批量时累积的 pytorch 损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66726886/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com