加入BN层后预测与训练时准确率差距很大解决方案,is_traing参数(ResNet,GoogLeNet,Inception)

环境:tensorflow 1.13.1  python 3.7.3

问题描述:网络中有BN层,训练时设置is_traing=True,验证时设置为False,发现验证或者测试时准确率差距很大。且发现batch-size对其影响严重,就是说如果batch-size=1进行预测时分类结果全部为一类,但是batch-size>=2时,准确率大概70%(训练结果准确率为98%)。一个batch内的不同数据会相互影响,两个相近数据得到的分类结果偏差更大。

问题分析:找了很久,网络上很多说训练Is_traing=True,验证时为False,都是这样设置的。甚至有人说训练验证都设置为True。究其原因,是因为BN层参数未保存!!!

问题解决:存储saver时手动存储变量

在训练或者测试时,saver的初始化如下:

var_list = tf.trainable_variables()
g_list = tf.global_variables()
bn_moving_vars = [g for g in g_list if 'moving_mean' in g.name]
bn_moving_vars += [g for g in g_list if 'moving_variance' in g.name]
var_list += bn_moving_vars
saver = tf.train.Saver(var_list=var_list, max_to_keep=5)

PS:这之前更基础的是定义完整的BN层,比如这些,最后还是发现问题尝试下以上解法:

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值