2024-04-25 15:06:09 发布
网友
clip_grad_norm(在执行就地修改时,实际上不赞成使用这种语法,而赞成使用更一致的尾随语法_)通过连接传递给函数的所有参数来剪裁整体渐变的规范,如the documentation:
clip_grad_norm
_
The norm is computed over all gradients together, as if they were concatenated into a single vector. Gradients are modified in-place.
从您的示例来看,您希望^{}而不是具有类似语法并在适当位置修改渐变的^{}:
clip_grad_value_(model.parameters(), clip_value)
另一个选择是注册一个backward hook。这将当前渐变作为输入,并可能返回一个张量,该张量将用于代替先前的渐变,即修改它。每次计算渐变后都会调用此钩子,即钩子注册后无需手动剪切:
for p in model.parameters(): p.register_hook(lambda grad: torch.clamp(grad, -clip_value, clip_value))
更完整的例子
optimizer.zero_grad() loss, hidden = model(data, hidden, targets) loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), args.clip) optimizer.step()
来源:https://github.com/pytorch/pytorch/issues/309
通过阅读the forum discussion可以得到:
clipping_value = 1#arbitrary number of your choosing torch.nn.utils.clip_grad_norm(model.parameters(), clipping_value)
我相信它的深度不仅仅是这个代码片段。
clip_grad_norm
(在执行就地修改时,实际上不赞成使用这种语法,而赞成使用更一致的尾随语法_
)通过连接传递给函数的所有参数来剪裁整体渐变的规范,如the documentation:从您的示例来看,您希望^{} 而不是具有类似语法并在适当位置修改渐变的^{} :
另一个选择是注册一个backward hook。这将当前渐变作为输入,并可能返回一个张量,该张量将用于代替先前的渐变,即修改它。每次计算渐变后都会调用此钩子,即钩子注册后无需手动剪切:
更完整的例子
来源:https://github.com/pytorch/pytorch/issues/309
通过阅读the forum discussion可以得到:
我相信它的深度不仅仅是这个代码片段。
相关问题 更多 >
编程相关推荐