博客
关于我
Pytorch实践--eval 模式,每次预测相同的数据得到的概率不同
阅读量:789 次
发布时间:2019-03-25

本文共 831 字,大约阅读时间需要 2 分钟。

在使用PyTorch训练好的模型进行预测时,可能会遇到一个问题,此问题出现在模型被设置为评估模式(eval())后。具体来说,同一数据在每次预测时,概率值会出现变化。这种情况下,许多技术人员可能会感到困惑,不知道为什么相同数据的预测结果会截然不同。

分析与原因

使用eval()模式会将模型切换为评估模式,此时模型的Dropout和BatchNorm层(如果有的话)会生效。但需要注意的是,这些层必须包含在模块(_modules)中。只有当类成员的type派生于Module时,该成员才会被自动划归到_modules中。如果在设计网络时,某些包含Dropout或BatchNorm的层不被包含在模块中,那么在评估模式下,这些层将无法正常工作。

查看源码发现

通过检查模型的源码,可以发现以下情况:某些成员函数使用了nn.Dropout,尽管它应该属于模块。但是,由于某些原因,这个Dropout层不属于_modules,这就导致在评估模式下,Dropout层无法正常工作。这个问题导致每次对同一数据进行预测时,Dropout层的随机采样结果不同,从而造成概率值的变化。

解决方案

要解决此类问题,模型开发者需要确保在网络设计阶段,所有使用Dropout或BatchNorm的层都包含在模块(_modules)中。这样,在评估模式下,这些层才能正常工作。这是确保模型在评估模式下表现稳定和可靠的关键步骤。

建议开发人员在构建网络时,仔细检查每个使用Dropout或BatchNorm的层是否被正确地包含在模块中。如果某个特定的层不在模块中,应将该层所属的父容器或者整体网络结构进行检查,并确保它们被正确划归到模块中。如果在代码中没有明确地将这些层包含在模块中,可能需要手动调整模型的结构,使其符合PyTorch的模块化管理方式。

通过以上措施,可以确保模型在评估模式下,其Dropout和BatchNorm层能够正常工作,从而使得模型预测结果具有稳定性和可测量性。

转载地址:http://jjxuk.baihongyu.com/

你可能感兴趣的文章
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>