谈谈如何训练一个性能不错的深度神经网络

谈谈如何训练一个性能不错的深度神经网络

深度学习大火,将各个数据集的state of the art不断地刷新,到了开源代码一放出,有种全民皆可刷排名的节奏。

不过可别把刷数据想的那么简单,不然大家去哪发paper,怎么混饭吃= = 但是我不想发paper就想占坑刷数据怎么办,看到cifar10都尼玛刷到了95%了,我这用caffe自带的小demo才得出78%的结果,caffe你确定不是在骗我?

caffe确实没在骗你= =今天我给大家介绍一下如何刷出一个性能接近paper的神经网络

以CNN为例,基本分为三步:

第一步使用leaky relu,dropout(具体参见blog.kaggle.com/2015/01/02/cifar-10-competition-winners-interviews-with-dr-ben-graham-phil-culliton-zygmunt-zajac/

第二步,数据扰动,将数据上下左右平移,放大缩小,泛绿,泛红,反色等等,做很多的合理的扰动,

第三步,固定步长学习,直到训练不动,找一个高精度的solverstate作为起点,将学习率下降再训练,按理说降到1e-4就训练的差不多了

其实当你研究多了就发现,真正提高性能的还是第二步,其他的只能说是锦上添花,数据扰动才是根本,当然这也揭示了分类器本身的缺陷。

当然了,有人问,你网络结构还没给呢,这个嘛,paper跟实验接触多了,自己自然就会设计了,我倒是觉得网络结构不是主要的,因为CNN的致命缺陷其他分类器也都有,要解决只能说是都一起解决。

MNIST我靠数据扰动将结果刷到了99.58%,结构很简单粗暴无脑,cifar10扰动太少只是88%,做多了上90%应该很轻松,ImageNet,呵呵,看看金连文老师微博上对百度在ImageNet上的评论你就知道我想说什么了。

(百度把指标刷到了4.58%,主要的工作就是(1)更多的银子(144块GPU集群)(2)更大的网络(6个16层212M的模型集成)(3)更多的数据(每张图合成出上万种变化)——金连文)

时间: 2024-10-08 17:34:43

谈谈如何训练一个性能不错的深度神经网络的相关文章

#glances#一个非常不错的性能监控工具

因为nagios过于复杂,之前弄zabbix又出现了为知状况.我只是想找个能实时收集数据进行分析的工具,无疑Glances是最好的选择. 另外,我在找工具时,发现了一个比较不错的简易监控工具--linux dashboard.github上有,可以去研究下. glances的安装非常简单,不仅支持直接在终端上显示数据,还支持在web上显示,除了监视本机的负载,还可以非常轻易地监控指定服务器(前提是装有Glances,并以server模式启动glances)的负载,甚至提供了REST和XML-RP

用spark训练深度神经网络

SparkNet: Training Deep Network in Spark 这篇论文是 Berkeley 大学 Michael I. Jordan 组的 ICLR2016(under review) 的最新论文,有兴趣可以看看原文和源码:paper,github . 训练深度神经网络是一个非常耗时的过程,比如用卷积神经网络去训练一个目标识别任务需要好几天来训练.因此,充分利用集群的资源,加快训练速度成了一个非常重要的领域.不过,当前非常热门的批处理计算架构(例如:MapReduce 和 S

第十一章——训练深度神经网络

上一章我们训练了一个浅层神经网络,只要两个隐层.但如果处理复杂的问题,例如从高分辨率图像中识别上百种类的物品,这就需要训练一个深度DNN.也行包含十层,每层上百个神经元,几十万个连接.这绝不是闹着玩的: 首先,需要面对梯度消失(或者相对的梯度爆炸)问题,这会导致浅层很难被训练. 其次,这么大一个网络,训练速度很慢. 最后,一个包含上百万参数的模型,存在很大过拟合的风险. 11.1 梯度消失(爆炸)问题 反向传播算法会计算损失函数关于每一个参数的偏导数,然后使用梯度下降更新参数.不幸的是,反向传播

深度神经网络训练的必知技巧

本文主要介绍8种实现细节的技巧或tricks:数据增广.图像预处理.网络初始化.训练过程中的技巧.激活函数的选择.不同正则化方法.来自于数据的洞察.集成多个深度网络的方法. 1. 数据增广 在不改变图像类别的情况下,增加数据量,能提高模型的泛化能力. 自然图像的数据增广方式包括很多,如常用的水平翻转(horizontally flipping),一定程度的位移或者裁剪和颜色抖动(color jittering).此外还可以尝试多种操作的组合, 例如同时做旋转和随机尺度变换,此外还可以把每个pat

Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally如何使用尽可能少的标注数据来训练一个效果有潜力的分类器

作者:AI研习社链接:https://www.zhihu.com/question/57523080/answer/236301363来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 今天我给大家介绍一下 CVPR 2017 关于医学图像处理的一篇比较有意思的文章,用的是 active learning 和 incremental learning 的方法. 今天分享的主要内容是,首先介绍一下这篇文章的 motivation,就是他为什么要做这个工作:然后介绍一下他

一个性能(压力)测试工具列表

我个人认为一个优秀的软件工程师必须掌握一定的测试技能.可能有的开发工程师认为测试是测试工程师的事情,不是开发工程师的事情.这种开发工程师是缺一条腿的,离开了测试工程师,你如何证明你的程序没有问题. 下面是我这两天搜集的性能测试工具,如果大家知道别的工具,可以在回复中分享出来. Webbench Web Bench is very simple tool for benchmarking WWW or proxy servers. Uses fork() for simulating multip

解决 EF 分层查询的一个性能问题

前两年帮朋友 做了个网吧管理软件,采用动软的三层架构 sql语句生成的.最近因功能变更 要改动,而我这段正在做asp.net mvc +ef+autofac的一个电商网站.索性 就把原来的底层全重新了套用了我现在的架构 EF6.0+autofac+三层架构,上层的asp.net没有变.改完后发现交班页面打开巨慢. 跟踪EF生成的sql语句   发现生成的sql 有问题,查找的全表,而全表有近10万条的数据. 继续跟踪数据库的耗时查询 发现确实是这条语句占时间 为什么会这样呢,我在查询里做条件搜索

一个性能较好的jvm参数配置以及jvm的简介

一个性能较好的web服务器jvm参数配置: -server //服务器模式 -Xmx2g //JVM最大允许分配的堆内存,按需分配 -Xms2g //JVM初始分配的堆内存,一般和Xmx配置成一样以避免每次gc后JVM重新分配内存. -Xmn256m //年轻代内存大小,整个JVM内存=年轻代 + 年老代 + 持久代 -XX:PermSize=128m //持久代内存大小 -Xss256k //设置每个线程的堆栈大小 -XX:+DisableExplicitGC //忽略手动调用GC, Syst

一个性能较好的jvm參数配置以及jvm的简单介绍

一个性能较好的webserverjvm參数配置: -server //服务器模式 -Xmx2g //JVM最大同意分配的堆内存,按需分配 -Xms2g //JVM初始分配的堆内存.一般和Xmx配置成一样以避免每次gc后JVM又一次分配内存. -Xmn256m //年轻代内存大小.整个JVM内存=年轻代 + 年老代 + 持久代 -XX:PermSize=128m //持久代内存大小 -Xss256k //设置每一个线程的堆栈大小 -XX:+DisableExplicitGC //忽略手动调用GC,