这两者之间有什么区别?
model.training = False
和
for param in model.parameters():
param.require_grad = False
答案 0 :(得分:2)
model.training = False
将模块设置为评估模式,即
if model.training == True:
# Train mode
if model.training == False:
# Evaluation mode
因此,有效的层(例如辍学,batchnorm等)在训练中表现不同,并且测试过程知道发生了什么,因此可以相应地表现。
同时
for param in model.parameters():
param.require_grad = False
冻结层,以使这些层不可训练。
基本思想是所有模型都有一个函数model.children()来返回其图层。在每一层中都有参数(或权重),可以使用.param()在任何子级(即层)上获得这些参数(或权重)。现在,每个参数都有一个名为requires_grad
的属性,默认情况下为True。 True表示它将反向传播,因此要冻结某个图层,您需要为图层的所有参数将require_grad设置为False。