热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

层数比较深的网络训练技巧

   监督性区分性分层训练          遇见的问题:假如训练20层的网络,直接堆积网络,由于网络过于深入,每一层都会有误差(并且是小于1的值),这样可能会在回传的时候会导致梯

 



  1.     监督性区分性分层训练



              遇见的 问题: 假如训练20层的网络,直接堆积网络,由于网络过于深入,每一层都会有误差(并且是小于1的值),这样可能会在回传的时候会导致梯度消失(连续累✖️越来越小),无法收敛,那么是如何训练的呢(很多情况都是由于初始数值不好导致)。

                解决方法:1. 进行分层训练,首先先抽7层隐层,然后后边直接接入一个到输出层的线性变换,先用部分数据训练这样的7层网络结构。

                                   2. 等到网络不再震荡之后再加7层隐层,使用训练数据训练14层网络,最后再加6层,训练。(一般20%-30%的数据进行训练)

                                   3. 最终使用全部数据+20层网络进行训练最终的结果

            核心思想:由于网络过于深直接训练不好训练,因此使用类似refine的机制(如果直接使用开源模型例如imagenet、resnet等,可以直接进心refine)



  1.    加入残差



             

      3.   中间加入损失函数

           



  1. **函数尽量不要使用sigmoid,尽量使用relu。



            解释:sigmoid函数会有两个饱和区(y的数值接近于1或者-1的时候,在饱和区的梯度接近于0,或者很小,很容易导致模型无法收敛)



推荐阅读
author-avatar
萌萌蚂蚁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有