目录
问题
偶然发现明明将网络中某一层requires_grad设置为True,在loss.backward()后该层的梯度并不为None,反而全是0,并且optimizer.step()前后参数被更新了。
原因
这是在需要多次使用backward(),step()时会出现的问题,当第一次调用loss.backward(retain_graph=True)时,保留了计算图,因此这个被冻住的层的梯度并不会被清空为None,而是保留了下来,当使用optimizer.zero_grad()后,所有的梯度被置为0,也并不会清除掉。
虽然是0,但在更新梯度时,该层还是会被更新