码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • pytorch 笔记:validation ,model.eval V.S torch.no_grad


    1 validation的一般框架

    模型为model,优化器为optimizer

    1. min_val_loss = np.inf
    2. for epoch in range(1, epochs + 1):
    3. ############################训练部分开始#############################
    4. model.train()
    5. train_losses = []
    6. for (batch_x, batch_y) in train_loader:
    7. output = model(batch_x)
    8. loss = criterion(output, batch_y)
    9. optimizer.zero_grad()
    10. loss.backward()
    11. optimizer.step()
    12. #pytorch 老三样
    13. ############################训练部分结束#############################
    14. ############################验证部分开始#############################
    15. model.eval()
    16. for (batch_x, batch_y) in val_loader:
    17. with torch.no_grad():
    18. output = model(batch_x)
    19. loss = criterion(output, batch_y)
    20. val_losses.append(loss.item())
    21. val_loss = np.mean(val_losses)
    22. if val_loss < min_val_loss:
    23. min_val_loss = val_loss
    24. torch.save(model.state_dict(), save_path)
    25. #保存最优模型
    26. ############################验证部分结束#############################

    test的时候,就可以加载这个最佳模型对应的参数(model.load_state_dict),进行测试

    2 model.eval() V,S with torch.no_grad()

    2.1 相同点

    在PyTorch中进行validation时,使用他们均可切换到测试模式。

    eg,对于dropout层和batchnorm层:

    • 在train模式下,dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p); batchnorm层会继续计算数据的mean和var等参数并更新。
    • 在val模式下,dropout层会让所有的激活单元都通过,而batchnorm层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。

    2.2 不同点

    • model.eval()仍然会涉及gradient的计算和存储,与training模式一样,只是不进行反向传播。
    • **with torch.zero_grad()**则停止autograd模块的工作,也就是停止gradient计算,以起到加速和节省显存的作用,从而节省了GPU算力和显存,但是并不会影响dropout和batchnorm层的行为。(这俩还是train模式下的样子)

    • ——>二者搭配使用

  • 相关阅读:
    【JavaEE进阶系列 | 从小白到工程师】Date类的构造方法以及SimpleDateFormat构造方法与日期转换详解上篇
    用5000字讲清楚压敏电阻
    小黑跑步碰到了北邮女学霸,全马比我还快20分钟,同时崇拜我校学弟让我倍感羡慕的leetcode之旅:1379. 找出克隆二叉树中的相同节点
    图片公式识别@文档公式识别@表格识别@在线和离线OCR工具
    基于Keil a51汇编 —— 控制语句
    企业电子招投标系统源码之电子招投标系统建设的重点和未来趋势
    【D1 Dock Pro开发板】LED灯闪烁
    现代信号处理——其他谱估计方法(最大熵谱估计)
    AngelScript -- C++程序最好的脚本语言
    three.js webgl_tiled_forward 例子分析
  • 原文地址:https://blog.csdn.net/qq_40206371/article/details/125530157
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号