有BN层的模型,在测试时应该如何设置

问题描述

目前使用mindcv中的InceptionV3模型在MINIST数据集上训练(直接将MINIST数据集resize为299*299),结果发现如果在model.set_train(True)的情况下进行评估可以轻松达到98%+的准确率,但是如果是model.set_train(False)的情况下评估,准确率只有10%左右(约等于瞎猜)。

我猜测应该是BN层的问题,但是我不太清楚这个应该怎么处理?如果直接在model.set_train(True)模式下进行评估的话,这个结果可能不太可靠,可能会与batch_size有关,但是model.set_train(False)下的结果又是完全不可接受的。

启智平台,启算调试环境 镜像:mindspore2.0.0rc1_cann_6.3.rc1.alpha001_notebook

额外安装了 mindcv 0.3版本

解答

inceptionv3在mindcv是根据imagenet数据集进行调参的,更换数据集也需要相应调整参数,MNIST有官方的教程可以参考:https://www.mindspore.cn/tutorials/zh-CN/r2.2/beginner/quick_start.html

set_train 在eval期间必须保持False计算结果才是正确的

更多调参攻略可以参考官网指南:https://www.mindspore.cn/docs/zh-CN/r2.2/migration_guide/debug_and_tune.html

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卷积神经网络(BN)的批归一化(Batch Normalization, BN)层通常是在卷积层(Convolutional Layer)之后,激活函数(Activation Function)之前加入的。 BN层的目的是通过对每个批次的输入进行归一化处理,使得每个特征的分布接近均值为0,方差为1,从而加速网络的收敛速度并提高模型的稳定性和泛化能力。 在卷积神经网络中,BN层的添加方式为:对于每个卷积层的输出,将其输入进行归一化处理,然后将归一化后的值通过缩放(scale)和偏移(shift)操作调整到合适的范围,并作为激活函数的输入。 具体的步骤如下: 1. 对于卷积层的输出,计算每个通道(axis)的均值和方差,得到归一化的均值和方差。 2. 使用计算出的均值和方差对每个通道的输出进行归一化处理。 3. 使用缩放参数(scale)和偏移参数(shift)对归一化后的值进行线性变换,以恢复网络的表达能力。 4. 将归一化并调整的值作为激活函数的输入,继续神经网络的后续操作。 通过在每个批次的数据上进行归一化,BN层可以减少网络中不稳定性的影响,提高模型在训练和测试阶段的准确性。此外,BN层还具有一定的正则化效果,可以减少模型的过拟合。 总结起来,BN层是卷积神经网络中的一个重要组件,加在卷积层之后、激活函数之前,通过对每个批次的数据进行归一化处理,提高网络的性能和鲁棒性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值