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,选取训练好的值,否则则会取平均,可能导致生成的图片颜色失真。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
pytorch 中nn.Dropout的使用说明
看代码吧~ Class USeDropout(nn.Module): def __init__(self): super(DropoutFC, self).__init__() self.fc = nn.Linear(100,20) self.dropout = nn.Dropout(p=0.5) def forward(self, input): out = self.fc(input) out = self.dropout(out) return out Net = USeDropout()
-
pytorch Dropout过拟合的操作
如下所示: import torch from torch.autograd import Variable import matplotlib.pyplot as plt torch.manual_seed(1) N_SAMPLES = 20 N_HIDDEN = 300 # training data x = torch.unsqueeze(torch.linspace(-1, 1, N_SAMPLES), 1) y = x + 0.3 * torch.normal(torch.zeros(
-
浅谈pytorch中的dropout的概率p
最近需要训练一个模型,在优化模型时用了dropout函数,为了减少过拟合. 训练的时候用dropout,测试的时候不用dropout.刚开始以为p是保留神经元的比率,训练设置0.5,测试设置1,loss根本没减小过,全设置成1也是一样的效果,后来就考虑到是不是p设置错了. 上网一搜,果然是的!!!p的含义理解错了!不是保留的,而是不保留的! 具体的代码为: x2 = F.dropout(x1, p) x1是上一层网络的输出,p是需要删除的神经元的比例. 当p=0时,保留全部神经元更新.当p=1时
-
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.tra
-
PyTorch 实现L2正则化以及Dropout的操作
了解知道Dropout原理 如果要提高神经网络的表达或分类能力,最直接的方法就是采用更深的网络和更多的神经元,复杂的网络也意味着更加容易过拟合. 于是就有了Dropout,大部分实验表明其具有一定的防止过拟合的能力. 用代码实现Dropout Dropout的numpy实现 PyTorch中实现dropout import torch.nn.functional as F import torch.nn.init as init import torch from torch.autograd
-
PyTorch dropout设置训练和测试模式的实现
看代码吧~ class Net(nn.Module): - model = Net() - model.train() # 把module设成训练模式,对Dropout和BatchNorm有影响 model.eval() # 把module设置为预测模式,对Dropout和BatchNorm模块有影响 补充:Pytorch遇到的坑--训练模式和测试模式切换 由于训练的时候Dropout和BN层起作用,每个batch BN层的参数不一样,dropout在训练时随机失效点具有随机性,所以训练和测试要
-
pytorch 准备、训练和测试自己的图片数据的方法
大部分的pytorch入门教程,都是使用torchvision里面的数据进行训练和测试.如果我们是自己的图片数据,又该怎么做呢? 一.我的数据 我在学习的时候,使用的是fashion-mnist.这个数据比较小,我的电脑没有GPU,还能吃得消.关于fashion-mnist数据,可以百度,也可以点此 了解一下,数据就像这个样子: 下载地址:https://github.com/zalandoresearch/fashion-mnist 但是下载下来是一种二进制文件,并不是图片,因此我先转换成了图
-
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Pytorch 训练时有时候会因为加载的东西过多而爆显存,有些时候这种情况还可以使用cuda的清理技术进行修整,当然如果模型实在太大,那也没办法. 使用torch.cuda.empty_cache()删除一些不需要的变量代码示例如下: try: output = model(input) except RuntimeError as exception: if "out of memory" in str(exception): print("WARNING: out of
-
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
如下所示: device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")#第一行代码 model.to(device)#第二行代码 首先是上面两行代码放在读取数据之前. mytensor = my_tensor.to(device)#第三行代码 然后是第三行代码.这句代码的意思是将所有最开始读取数据时的tersor变量copy一份到device所指定的GPU上去,之后的运算都在GPU上
-
Pytorch Mac GPU 训练与测评实例
目录 正文 加速原理 环境配置 跑一个MNIST 跑一下VAE模型 一个愿景 正文 Pytorch的官方博客发了Apple M1 芯片 GPU加速的文章,这是我期待了很久的功能,因此很兴奋,立马进行测试,结论是在MNIST上,速度与P100差不多,相比CPU提速1.7倍.当然这只是一个最简单的例子,不能反映大部分情况.这里详细记录操作的一步步流程,如果你也感兴趣,不妨自己上手一试. 加速原理 苹果有自己的一套GPU实现API Metal,而Pytorch此次的加速就是基于Metal,具体来说,使
-
PyTorch使用GPU训练的两种方法实例
目录 Pytorch 使用GPU训练 方法一 .cuda() 方法二 .to(device) 附:一些和GPU有关的基本操作汇总 总结 Pytorch 使用GPU训练 使用 GPU 训练只需要在原来的代码中修改几处就可以了. 我们有两种方式实现代码在 GPU 上进行训练 方法一 .cuda() 我们可以通过对网络模型,数据,损失函数这三种变量调用 .cuda() 来在GPU上进行训练 # 将网络模型在gpu上训练 model = Model() model = model.cuda() # 损失
-
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
背景 在公司用多卡训练模型,得到权值文件后保存,然后回到实验室,没有多卡的环境,用单卡训练,加载模型时出错,因为单卡机器上,没有使用DataParallel来加载模型,所以会出现加载错误. 原因 DataParallel包装的模型在保存时,权值参数前面会带有module字符,然而自己在单卡环境下,没有用DataParallel包装的模型权值参数不带module.本质上保存的权值文件是一个有序字典. 解决方法 1.在单卡环境下,用DataParallel包装模型. 2.自己重写Load函数,灵活.
-
用pandas划分数据集实现训练集和测试集
1.使用model_select子模块中的train_test_split函数进行划分 数据:使用kaggle上Titanic数据集 划分方法:随机划分 # 导入pandas模块,sklearn中model_select模块 import pandas as pd from sklearn.model_select import train_test_split # 读取数据 data = pd.read_csv('.../titanic_dataset/train.csv') # 将特征划分到
-
测试模式 - XSL教程 - 5
xslt支持的测试模式语句,用于条件判断,主要有:<xsl:if> 和<xsl:choose>及其下的<xsl:when>和<xsl:otherwise> 还是在匹配模式中使用的用户列表数据源. 1:使用xsl:if <?xml version="1.0" encoding="GB2312"?> <xsl:stylesheet version="1.0" xmlns:xsl=&
随机推荐
- JSP 中Hibernate实现映射枚举类型
- Flex打开新窗口将主窗口数据传给子窗口然后返回
- oracle的nvl函数的使用介绍
- windows server 2008 登录过程中显示历史登录信息
- php实现的IMEI限制的短信验证码发送类
- C# 汉字转拼音(全拼和首字母)实例
- php设计模式 DAO(数据访问对象模式)
- C#代码实现短信验证码接口示例
- Android编程之DatePicker和TimePicke简单时间监听用法分析
- 详解Android中ViewPager的PagerTabStrip子控件的用法
- 解析MSSQL跨数据库查询的实现方法
- Bootstrap Metronic完全响应式管理模板学习笔记
- MSDOS.SYS文件的参数设置方法
- mysql启动服务报1058错误的解决方法
- DROP TABLE在不同数据库中的写法整理
- mysql tmp_table_size优化之设置多大合适
- sqlserver 用户权限管理,LINQ去除它的重复菜单项
- 基于JQuery的Ajax方法使用详解
- node.js中的fs.readdirSync方法使用说明
- Android连接服务器端的Socket的实例代码