今天又一次栽在了batch normalizaiton

1、训练baseLine的时候,is_training 没有传达到自己编写的子函数,导致baseline的bn层没有学习。修改后可能准确率会进一步提升
2、在分解实验中,bn层是不该学习的,但是却set is_training=True。这样的后果是,虽然一般层被冻结了,bn层的beta,gamma不在var_list中也被冻结了,但是moving_men/variance却在fine_tune过程中改变了,而这是在分解实验中不允许的。这也导致了将W_ave迁移到joint method中,初始准确率近乎为0-----W_reuse与原w_ave网络一致,但moving_men/variance却不匹配了

3、好事是,经过两次坑,现在对bn层基本能掌握能修改能支配了。
4、另外,经验之谈:如果发现测试的时候,is_training=False,准确率很低;只有is_training=True,准确率才正常,那么多半时网络的某个结构写错了,is_training时导致中间层的output与原来bn层的数据不匹配;而设置is_traning=True,实际上新的带错误结果的网络在测试时学习调整了bn层(而且学习对象时测试集),使得两者匹配,从而提高了准确率。这个问题发生两次了,好好debug网络结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值