pytroch实现训练与测试的不同输出
之前我们一直在说model.train()
,model.eval()
有利于BN与Dropout的实现。这是为什么呢?
因为BN与Dropout是对训练与测试是有不同的操作的!所以我们需要区分训练与测试。
在训练或测试代码之前我们规定:
- 训练要加
model.train()
- 测试要加
model.eval()
这是因为这样可以将模型中的training
属性置true
或false
。这样我们在就知道模型有没有训练了。
class Model(nn.Module):
def __init__(self):
pass
def isTraining(self):
if self.training:
return True
else:
return False
model = Model()
model.train()
print(model.training)
model.isTraining()
model.eval()
print(model.training)
model.isTraining()
result:
True
True
False
False