文章目录

  • 1. model.eval()
  • 2. model.train()

两者只在一定的情况下有区别:训练的模型中含有dropout 和 batch normalization

1. model.eval()

在模型测试阶段使用

pytorch会自动把BN和DropOut固定住,不会取每个batchsize的平均,而是用训练好的值。
不然的话,有输入数据,即使不训练,它也会改变权值。

一旦test的batch_size过小,很容易就会被BN层导致生成图片颜色失真极大;

测试模型的时候
一般model.eval() 和 with torch.no_grad() 一起使用。

model.eval()with torch.no_grad():...out_data = model(data)...
model.train() #最后别忘记加上

2. model.train()

让model变成训练模式,此时 dropout和batch normalization的操作在训练q起到防止网络过拟合的问题

总结: model.train() 和 model.eval() 一般在模型训练和评价的时候会加上这两句,主要是针对由于model 在训练时和评价时 Batch Normalization 和 Dropout 方法模式不同;
因此,在使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval;

在训练的时候, 会计算一个batch内的mean 和var, 但是因为是小batch小batch的训练的,所以会采用加权或者动量的形式来将每个batch的 mean和var来累加起来,也就是说再算当前的batch的时候,其实当前的权重只是占了0.1, 之前所有训练过的占了0.9的权重,这样做的好处是不至于因为某一个batch太过奇葩而导致的训练不稳定。
好,现在假设训练完成了, 那么在整个训练集上面也得到了一个最终的”mean 和var”, BN层里面的参数也学习完了(如果指定学习的话),而现在需要测试了,测试的时候往往会一张图一张图的去测,这时候没有batch而言了,对单独一个数据做 mean和var是没有意义的, 那么怎么办,实际上在测试的时候BN里面用的mean和var就是训练结束后的mean_final 和 val_final. 也可说是在测试的时候BN就是一个变换。所以在用pytorch的时候要注意这一点,在训练之前要有model.train() 来告诉网络现在开启了训练模式,在eval的时候要用”model.eval()”, 用来告诉网络现在要进入测试模式了.因为这两种模式下BN的作用是不同的。

https://blog.csdn.net/qq_32678471/article/details/102892930

Pytorch: model.eval(), model.train() 讲解相关推荐

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

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

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

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

  3. model.train()、model.eval()、optimizer.zero_grad()、loss.backward()、optimizer.step作用及原理详解【Pytorch入门手册】

    1. model.train() model.train()的作用是启用 Batch Normalization 和 Dropout. 如果模型中有BN层(Batch Normalization)和D ...

  4. Pytorch中model.eval()的作用分析

    model.eval() model.eval() 作用等同于 self.train(False) 简而言之,就是评估模式.而非训练模式. 在评估模式下,batchNorm层,dropout层等用于优 ...

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

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

  6. 【pytorch】model.train和model.eval用法及区别详解

    使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval,eval()时,框架会自动把BN和DropOut固定住,不会取平均,而是用训练好的值,不然的话,一旦test的 ...

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

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

  8. 详解Pytorch中的requires_grad、叶子节点与非叶子节点、with torch.no_grad()、model.eval()、model.train()、BatchNorm层

    requires_grad requires_grad意为是否需要计算梯度 使用backward()函数反向传播计算梯度时,并不是计算所有tensor的梯度,只有满足下面条件的tensor的梯度才会被 ...

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

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

最新文章

  1. 一万年太久,只争朝夕
  2. Spring MVC - 配置Spring MVC
  3. 程序员如何优雅地使用 Mac? - OS X - 知乎
  4. 【Office Word】论文排版有关技巧
  5. oracle12c 新增维护时间窗口,ORACLE 12C新特性-自动维护全局索引 | 信春哥,系统稳,闭眼上线不回滚!...
  6. AcWing1091.理想的正方形(单调队列DP)
  7. Creating and Interning Symbols
  8. 使用frp实现内网穿透
  9. Turbo码基本框架
  10. 遥感、GIS、计算机视频教程
  11. 第一章-网络安全行业
  12. 速达pro服务器显示试用,速达v3-pro商业版突然变成试用版了,加密狗的灯不亮了,是什么原因- _0...
  13. Android项目实战--手机卫士34--流量管理
  14. word打开文档很久很慢_win7系统打开word文档很慢需要等待很长时间的五种解决方法...
  15. 2008世界GDP排名
  16. 生物岛实验室(省属)招聘电子工程师
  17. 开发APP的java工具_程序猿必备的java的app开发工具有哪些
  18. 危险在线旅游,为何依然有人冒死买卖?
  19. 快速增加图片大小KB
  20. 测试用例及其注意事项

热门文章

  1. js数组查找最接近_在JavaScript数组中找到最小元素的位置
  2. c 最大子序列和_最大连续子序列
  3. laravel8找不到控制器_找一个“靠谱儿”的烟雾探测器方案,难不难?
  4. java的excel导出_java 实现excel 导出功能
  5. android paint 线宽_android Paint 设置线宽setStrokeWidth()的单位
  6. C语言实现用星号在屏幕上打印菱形
  7. 18f458中断入口C语言_操作系统开发之——中断
  8. mysql有没有类似merge_有关于Mysql的MERGE表类型
  9. linux启动过程中内核拷贝,轻松识破linux内核启动过程中的“”套路“”
  10. 航测大数据量处理_揭秘航测局“航空摄影质量自动检查系统”的“黑科技”