model.training = False和model.param.require_grad = False有什么区别

时间:2019-05-29 05:01:34

标签: pytorch

这两者之间有什么区别?

model.training = False

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

1 个答案:

答案 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。