这篇教程PyTorch dropout设置训练和测试模式的实现写得很实用,希望能帮到您。 看代码吧~class Net(nn.Module):…model = Net()…model.train() # 把module设成训练模式,对Dropout和BatchNorm有影响model.eval() # 把module设置为预测模式,对Dropout和BatchNorm模块有影响 补充:Pytorch遇到的坑——训练模式和测试模式切换 由于训练的时候Dropout和BN层起作用,每个batch BN层的参数不一样,dropout在训练时随机失效点具有随机性,所以训练和测试要区分开来。 使用时切记要根据实际情况切换: model.train()model.eval() 补充:Pytorch在测试与训练过程中的验证结果不一致问题 引言今天在使用Pytorch导入此前保存的模型进行测试,在过程中发现输出的结果与验证结果差距甚大,经过排查后发现是forward与eval()顺序问题。 现象此前的错误代码是 input_cpu = torch.ones((1, 2, 160, 160)) target_cpu =torch.ones((1, 2, 160, 160)) target_gpu, input_gpu = target_cpu.cuda(), input_cpu.cuda() model.set_input_2(input_gpu, target_gpu) model.eval() model.forward() 应该改为 input_cpu = torch.ones((1, 2, 160, 160)) target_cpu =torch.ones((1, 2, 160, 160)) target_gpu, input_gpu = target_cpu.cuda(), input_cpu.cuda() model.set_input_2(input_gpu, target_gpu) # 先forward再eval model.forward() model.eval() 当时有个疑虑,为什么要在forward后面再加eval(),查了下相关资料,主要是在BN层以及Dropout的问题。当使用eval()时,模型会自动固定BN层以及Dropout,选取训练好的值,否则则会取平均,可能导致生成的图片颜色失真。 以上为个人经验,希望能给大家一个参考,也希望大家多多支持51zixue.net。 pytorch Dropout过拟合的操作 只需要100行Python代码就可以实现的贪吃蛇小游戏 |