这两者有什么区别:
model.training = False
和
for param in model.parameters():
param.require_grad = False
这两者有什么区别:
model.training = False
和
for param in model.parameters():
param.require_grad = False
model.training = False将模块设置为评估模式,即
if model.training == True:
# Train mode
if model.training == False:
# Evaluation mode
因此,像 dropout、batchnorm 等在火车上表现不同的有效层和测试程序知道发生了什么,因此可以做出相应的行为。
尽管
for param in model.parameters():
param.require_grad = False
冻结层,使这些层不可训练。
基本思想是所有模型都有一个函数 model.children() 返回它的层。在每一层内,都有参数(或权重),可以在任何子层(即层)上使用 .param() 获得。现在,每个参数都有一个名为的属性requires_grad,默认情况下为 True。True 意味着它将被反向传播,因此要冻结一个层,您需要为层的所有参数设置 requires_grad 为 False。