今天学习pytorch,发现模型中间加了一层dropout层:
x = F.dropout(x, training=self.training)
大家知道,dropout层的作用就是将前面一层神经元的元素以一定概率置为0,减少模型对于某些特征的依赖,提高模型的泛化性。这个training=self.training
是啥意思呢。要知道我们的模型都是继承自nn.Module
类,这个类在训练的时候会使得self.training
为true,此时我们就正常使用dropout,而在测试的时候,self.training
为false,此时关闭dropout层。
那我们怎么改变模型的状态呢,我们咋知道模型处于训练状态还是测试状态呢,这里就需要用到两个函数:train()和eval()
假设说我们new的模型叫model,那么我们训练和测试应该是这样的:
model.train() #模型处于训练状态
训练代码…………
model.eval() #模型处于测试状态
测试代码…………