美文网首页
5.Tensorflow 二分类深度网络训练loss维持在0.6

5.Tensorflow 二分类深度网络训练loss维持在0.6

作者: 闪电侠悟空 | 来源:发表于2018-06-12 17:51 被阅读0次

    这个问题很多人在训练自己或者迁移别的网络的时候都会遇到,特别是二分类这样的简单网络,感觉无处着手,都他妈的是对的,就是Loss不动。到底什么原因了?吐槽的网址很多。比如这里,或者这里。若想知道解决办法,请直接跳到文章最后。

    • 0.69是个什么数?
      一般采用的都是cross entropy loss value,定义如下:



      发现就是网络预测给出的二类概率向量为[0.5,0.5],也就是a和1-a都是0.5,不管y取值0/1,整个的平均loss就是-ln(0.5)=0.69.

    • 为啥a老是为0.5呢?
      a的值是softmax的输出,在二分类的情况下为0.5,表明输入softmax的值x是(近似)相等的。



      进一步观察发现,x几乎都很小,随着训练的进行,还有进一步变小的趋势,可怕!

    • 为啥Conv和Pooling网络的输出一直往0走
      这个我是不清楚的,可能是初始化参数太小,可能是Relu形成的Dead node。于是我调整initializer,调整Relu为leaky-Relu。经过这些处理,网络能够保证在前两次Loss不为0.69,后面又回到了这个可怕的0.69。想到的方案统统不起作用,我甚至怀疑我是不是maximize loss 而不是 minimize loss。

    • 最终办法
      显然不是我的loss写错了,而是数据分布的问题。调整初始化和激活函数无法间接保证与调节数据分布,那我就强上了BN层,即,在网络的最后某个位置加上Batch Normalization层操作,归一化强力保证其分布,果然彻底解决了0.69问题。在此,不得不佩服前人在网络发展过程中的巨大贡献。

    我想这才是解决0.69问题的最终办法。选择不同的optimizer或者网络组成,都极有可能失败。

    相关文章

      网友评论

          本文标题:5.Tensorflow 二分类深度网络训练loss维持在0.6

          本文链接:https://www.haomeiwen.com/subject/dvjreftx.html