pytorch 实现在测试的时候启用dropout
我们知道,dropout一般都在训练的时候使用,那么测试的时候如何也开启dropout呢?
在pytorch中,网络有train和eval两种模式,在train模式下,dropout和batch normalization会生效,而val模式下,dropout不生效,bn固定参数。
想要在测试的时候使用dropout,可以把dropout单独设为train模式,这里可以使用apply函数:
def apply_dropout(m): if type(m) == nn.Dropout: m.train()
下面是完整demo代码:
# coding: utf-8 import torch import torch.nn as nn import numpy as np class SimpleNet(nn.Module): def __init__(self): super(SimpleNet, self).__init__() self.fc = nn.Linear(8, 8) self.dropout = nn.Dropout(0.5) def forward(self, x): x = self.fc(x) x = self.dropout(x) return x net = SimpleNet() x = torch.FloatTensor([1]*8) net.train() y = net(x) print('train mode result: ', y) net.eval() y = net(x) print('eval mode result: ', y) net.eval() y = net(x) print('eval2 mode result: ', y) def apply_dropout(m): if type(m) == nn.Dropout: m.train() net.eval() net.apply(apply_dropout) y = net(x) print('apply eval result:', y)
运行结果:
可以看到,在eval模式下,由于dropout未生效,每次跑的结果不同,利用apply函数,将Dropout单独设为train模式,dropout就生效了。
补充:Pytorch之dropout避免过拟合测试
一.做数据
二.搭建神经网络
三.训练
四.对比测试结果
注意:测试过程中,一定要注意模式切换
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
这篇文章主要介绍了python3 opencv 图像二值化cv2.adaptiveThreshold函数的相关知识,结合示例代码介绍了adaptiveThreshold方法的用法,需要的朋友可以参考下2022-04-04Python自动生成代码 使用tkinter图形化操作并生成代码框架
这篇文章主要为大家详细介绍了Python自动生成代码,使用tkinter图形化操作并生成代码框架,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2019-09-09Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
这篇文章主要介绍了Python 进程操作之进程间通过队列共享数据,队列Queue,结合实例形式分析了Python进程数据共享、队列数据处理相关操作技巧,需要的朋友可以参考下2019-10-10
最新评论