我是靠谱客的博主 专一棒棒糖,最近开发中收集的这篇文章主要介绍加入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层,比如这些,最后还是发现问题尝试下以上解法:

最后

以上就是专一棒棒糖为你收集整理的加入BN层后预测与训练时准确率差距很大解决方案,is_traing参数(ResNet,GoogLeNet,Inception)的全部内容,希望文章能够帮你解决加入BN层后预测与训练时准确率差距很大解决方案,is_traing参数(ResNet,GoogLeNet,Inception)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部