1

这两者有什么区别:

model.training = False

for param in model.parameters():
    param.require_grad = False
4

1 回答 1

3

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。

于 2019-05-29T06:11:27.727 回答