毕设:防止训练模型过拟合+文字倾斜矫正

尝试对Lenet网络进行K-fold验证

在网络上找到的tensorflow并没有集成对神经网络进行k-fold cross validation的函数,思考原因,找到了以下回答:

如果用了dropout,相当于用了cross
validation,因为每个训练数据在每个epoch只能见到一个随机的子网络。最后测试时是这k个子网络的平均,k接近无限。
还有如果随机的组成mini batch,每个batch又是训练数据的随机子集,也相当于把训练数据分为无限个子集,降低了过拟合风险。
我理解是以上两点引入足够的随机性,能让结果稳定。如果还有过拟合,还可以加其他方法,比如对参数加L1/L2norm限制,data
augmentation,unet/auto encoder等稀疏结构。
来自:http://sofasofa.io/forum_main_post.php?postid=1003228

dropout在每一次传输之后都会自动的切断某个两个神经元之间的连线,这与继承学习的道理类似,目的就是为了构造不同的网络结构,增强网络的稳定性。
神经网络的训练费时间,所以一般都只将集合分为train、validation、test三个部分即可,至于防止过拟合的方法,上面也有提到,采用dropout、mini batch这一些措施即可

上周在训练模型的时候validation的准确率达到了99%,这显然是过拟合了。我回去查看代码,发现其实验证集和训练集有重叠。于是我重新划分了数据集,再次训练,得到一个比较合理的模型,前后对比如图:
错误使用数据

正确使用数据7:3

倾斜校正问题

有些人写字写一行都能写歪,确实是一个脑残的问题。
所以只能靠算法补上。但算法也不是万能的。
倾斜矫正有两个办法:

  • 通过大量的数据集去学习复杂文本的位置
    但这种很大程度上识别区域不全,所以会使得后面识别字体的时候准确度下降,或者漏识别。
  • 利用霍夫变换进行直线检测。
    这种方法对于检测出来的直线难以筛选,经过测试有时候甚至认为筛选也无法去掉某些长度一致但不需要的直线…因此无法调整合适的图像旋转角度。
    下面是霍夫变换检测直线的例子,就单行来讲,检测起来只要是参数人工调整,还是比较理想的:
    直线检测
    直线检测2
    直线检测3
    最后决定采用:
    利用霍夫变换进行直线检测
    但是,其中霍夫变换这个函数对于检测出来的直线数量变化很大,受图像信息影响比较厉害,所以在设置的时候需要人为地去更改参数。并写好参数说明。

参考博客:
https://blog.csdn.net/ftimes/article/details/106816736?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-1&spm=1001.2101.3001.4242

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值