PyTorch `optimizer.step()` 影响 BatchNorm2d 权重的梯度
我发现 optimizer.step()
这一步会改变 torch.nn.BatchNorm2d
层的 weight 和 bias 的梯度(看上去是每个元素按照相同的比例进行了缩放)。如果想要比较梯度,应该在 optimizer.step()
之前来对比,想要对比更新后的权重,要在 optimizer.step()
之后对比。
这很不应该啊?
版本 2.4.1 + CUDA 11.7(自行构建)上和版本 2.2.2 + CUDA 11.8 上都验证过会出现这种情况。