前言:
第一篇博客,记录下自己的学习心得。如有谬误,欢迎指正。

为什么用model.eval()

当网络中存在BN层或者Dropout,在测试的时候需要固定住固定BN层和dropout层。关于BN层的详细介绍可以参考这篇博文:Pytorch的BatchNorm层使用中容易出现的问题

训练数据的时候acc可以达到99%,但是测试时acc只有33%,显然这是不行的。查询了一些资料给出的解决方案如下:、

  1. 删去相同的BN层
    其实我没太理解这个,怎么才算相同的BN层

  2. track_running_stats设为False
    含义为测试时用当前batch的方差和均值(为True则使用训练时得到的方差和均值)。我在这样设定后,测试效果确实变好了,但是之前训练得到方差和均值就没啥意义了。

  3. 数据进行归一化
    有的人可能是没有进行数据归一化从而导致测试效果较差。我的训练集归一化什么的肯定是没问题的,将训练集作为测试集,原则上应该拟合的很好,但在加model.eval()后,效果依然不好,显然不是归一化的问题了。

  4. 增大训练样本batch_size
    没想到会是这方面原因,因为我以前觉得加不加大batch_size,最后得到的方差和均值都一样,有点搞笑。
    网络中加入了BN层,训练时BN层中的方差和均值是根据每个batch的样本进行更新的,测试的时候这俩个参数是固定的。
    我把训练的batch_size设为了1,那么训练完成后获得的方差和均值是接近于最后一个样本的方差和均值的。加了model.eval(),在测试的时候相当于是用这最后一个样本的方差和均值来获得测试集的输出,显然这个方差和均值是不具备全局性的,结果肯定是不好的。在增大batch_size后,获得的方差和均值是更接近于全局特性的,所以当我将batch_size设为64后,测试集的acc提到了85%,尽管不是很高,但也足以证明增大batch_size是十分有效的。

探究pytorch model.eval()测试效果远差于model.train()相关推荐

  1. 【Pytorch】model.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别

    model.train() 启用 Batch Normalization 和 Dropout 如果模型中有BN层(Batch Normalization)和Dropout,需要在训练时添加model. ...

  2. pytorch的训练测试流程总结,以及model.evel(), model.train(),torch.no_grad()作用

    pytorch的 model.eval()和model.train()作用 pytorch中model.train()和model.eval()的区别主要在于Batch Normalization和D ...

  3. Pytorch:model.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别

    model.train()和model.eval()的区别主要在于Batch Normalization和Dropout两层. model.train() 官方文档 启用 Batch Normaliz ...

  4. 【PyTorch】eval() ==>主要是针对某些在train和predict两个阶段会有不同参数的层,比如Dropout层和BN层

    model的eval方法主要是针对某些在train和predict两个阶段会有不同参数的层.比如Dropout层和BN层 torch为了方便大家,设计这个eval方法就是让我们可以不用手动去针对这些层 ...

  5. Pytorch的model.train() model.eval() torch.no_grad() 为什么测试的时候不调用loss.backward()计算梯度还要关闭梯度

    使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval model.train() 启用 BatchNormalization 和 Dropout 告诉我们的网络,这 ...

  6. 【Pytorch】model.train() 和 model.eval() 原理与用法

    文章目录 一.两种模式 二.功能 1. model.train() 2. model.eval() 为什么测试时要用 model.eval() ? 3. 总结与对比 三.Dropout 简介 参考链接 ...

  7. model.train()和model.eval()的用法及model.eval()可能导致测试准确率的下降

    问题导入: 一般我们在训练模型时会在前面加上:model.train() 在测试模型时会在前面使用:model.eval() 但是在某次使用网络测试模型时,训练准确率很高,但测试准确率很低,排查了各种 ...

  8. 分类模型训练完之后,测试效果极差可能原因分析

    在知乎上有这样一个问题: acc很高,但预测正确的样本占比又很低,怎么回事? - 知乎 关于这个问题,在这个问题的回答中,有许多大佬从数据的分布.模型的结构.数据集的划分,以及验证指标等层面进行了解答 ...

  9. paddle静态图训练,训练集和测试集效果都有很好,但验证集上效果很差

    在paddle静态图训练中,训练集和测试集效果都有很好,但验证集上效果很差 在paddle的训练中,如果使用这样的方式进行训练 main_program = fluid.default_main_pr ...

最新文章

  1. 2019年上半年收集到的人工智能深度学习方向干货文章
  2. TextVew中文空格
  3. H3C PPP基本概念
  4. ADO学习(九)如何阅读ADO文档
  5. OpenCV的工具函数
  6. struts2 过滤器和拦截器的区别和使用
  7. 首批骁龙875旗舰!小米11屏幕依然是挖孔
  8. 2021高考成绩查询。,2021高考成绩公布时间 2021高考成绩查询方式
  9. Jenkins+Git+Maven+Nexus+Tomcat
  10. SCOR模型(转载)
  11. Arch LInux | 网络管理工具iproute2(网络接口、ip地址、路由表)
  12. python实现调用百度图像识别api得到图片识别与检测类别和详细信息以及相关准确度
  13. CDQZ_Training 2012-5-10 舞蹈课
  14. Scala学习小计 - 什么是模式匹配(pattern-matchin)?
  15. 【中序、后序遍历序列】【前序、中序遍历序列】构造二叉树
  16. 如何安装Java JDK
  17. Win10 安装Visio2016和Offic2016安装出现即点即用无法安装问题
  18. Codeblocks的安装与配置
  19. SpringBoot jap使用原生Sql的几种姿势
  20. 【创新应用】5AloT(5G+AI+物联网)深度研究报告:下一轮科技红利

热门文章

  1. 等式约束与不等式约束问题
  2. [笔记分享] [Tools] QPST使用过程
  3. 高通平台如何使用QPST抓DUMP
  4. 每天一学设计模式(一、单一职责原则)
  5. LeetCode 力扣 算法题解 1109. 航班预订统计(Corporate Flight Bookings) n 个航班,它们分别从 1 到 n 进行编号,请返回每个航班预定的座位总数。
  6. 优雅的点(2017网易校园招聘)---最详细的解答
  7. c# 调用zebra打印指令 打印到USB端口
  8. ps中海报设计的设计思路
  9. 达梦数据库中各种表的管理
  10. Python外星人入侵游戏——添加飞船和外星人图片