如何判断深度学习的网络是否work?

写在前面:对于多数从业者而言,从头开始写深度学习程序的情况比较少。多数情况下,都是从Github上下载已有的深度学习的程序,使用自己的数据集进行训练,或者根据需要对程序进行修改。一般官方公开的代码实现与论文接近,而个人开发者公布的代码实现可能与官方论文有所差距。首先要做的一件事就是确保模型本身可以work。因此,需要有一双“慧眼”,在实践之初判断模型的性能好坏。那么,如何判断深度学习的网络是否work呢?接下来,根据自己的实践经历,结合其他资料,略谈一二,仅供自己记录。

 

1.使用标准数据集进行训练并测试

以场景文字检测为例,公开的数据集有icdar2011, icdar2013, icdar2015, coco-text, msra-td500等。如果想检验某检测模型对于场景文字的检测性能,可以先使用场景文字的标准数据集训练,将结果与论文中的结果进行比较。由于数据集的大小不一样,或者trick的原因,可能不一定会得到完全相同的结果,但应当比较接近。

比如,测试github上公开的R2CNN代码和EAST代码,对于旋转的场景文字数据集的检测性能。鉴于icdar2015的测试集标注没有公布,将icdar2015数据集公开的1000张训练数据集随机划分为900张训练集和100张测试集。两个网络使用相同的训练集,迭代10w次,测试结果分为为50%和70%。此时,可以得到大致判断。

 

2.使用小数据集进行训练

同样的网络,对于不同的数据集的拟合性能可能存在差异。那么,选用一个新的数据集时,可以先用该数据集的子集进行快速迭代训练,并直接在该训练子集上进行测试,判断该模型是否可以出现过拟合。如果可以,那么说明该模型应当有能力提取该数据集的特征;如果在非常小的数据集上也不能过拟合,那么,需要重新考量该模型提取特征的能力。

 

3.调整超参数

使用目标检测的模型检测场景文字检测时,需要调整一些超参数,如anchor的比例,数量,正负样本的比例等。同样,可以使用子训练集,同时对多组参数进行调试。如果多组参数均不能work,那么可能是模型本身的问题。

 

4.一些可能的方法

1)从简单并且得到广泛应用的网络开始,如VGG,如果可以的话使用标准的损失函数;

2)暂时去掉所有的trick,如数据增强(data augmentation)和正则化(regularization);

3)如果是微调(finetuning)模型,再次检测数据的预处理,保证其和原始网络训练时一致;

4)检查输入数据是正确的;

5)从很少量的数据开始(2-20)样本,使其过拟合,然后逐渐增加样本;

6)逐渐增加trick,数据增强,正则化,新的损失函数,更复杂的网络等等。

 

已有前辈总结的《深度玄学:你的网络不work的37种原因》,可参考。

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值