【发布时间】:2022-10-02 16:10:13
【问题描述】:
我有一个基于 REINFORCE 算法的玩具强化学习项目(这里是PyTorch\'s implementation),我想添加批量更新。在 RL 中,“目标”只能在“预测”完成后创建,因此标准批处理技术不适用。因此,我为每一集累积损失并将它们附加到一个列表l_losses,其中每个项目都是一个零维张量。我推迟致电.backward() 或optimizer.step(),直到经过一定数量的剧集以创建一种伪批次。
鉴于此损失列表,我如何让 PyTorch 根据其平均梯度更新网络?或者基于平均梯度的更新与平均损失的更新相同(我似乎在其他地方读过)?
我目前的方法是从torch.stack(l_losses) 创建一个新张量t_loss,然后运行t_loss = t_loss.mean()、t_loss.backward()、optimizer.step(),并将梯度归零,但我不确定这是否等同于我的意图?我也不清楚我是否应该在每个单独的损失上运行.backward(),而不是将它们连接到一个列表中(但坚持.step() 部分直到最后?
标签: python deep-learning pytorch gradient-descent