搞CNN的工程应用有一段时间了,特别是在计算机视觉领域。分享下我自己的CNN学习历程。
深度学习到底是啥?
简单的说,深度学习就是模仿人脑结构,像人一样学习(当然,也有所谓的专家不同意这个观点);它处理问题的路径是从具体到抽象、从部分到整体。像人的认知过程一样逐层进行,逐步抽象。最大的特点就是网络自己学习特征、组合特征,而不需要人工参与。
入门路线
1、首先在自己电脑上安装一个开源的框架,像Tensorflow、caffe这样的,先玩一下这个框架,把框架用起来
2、然后跑一些基础的网络,由浅入深
3、如果有条件的话,整个有GPU的电脑,GPU跑的要快很多,跟CPU比起来
详细点说,我认为可以按以下步骤去学习它:
第一个阶段:
1)、实现并训练只有一层的softmax回归模型用于手写数字图片分类;
2)、实现并训练含三个全连接层的模型用于手写数字图片分类;
3)、实现并训练含三个卷基层+池化层的模型用于手写数字图片分类;
阶段目的:搞懂一些机器学习、深度学习的概念,找个开源工具并用起来,尝试着训练一些简单的网络,试试加入一些常见的trick去调试网络。
第二个阶段:
训练一些经典的CNN分类网络,熟悉一些常用数据集,熟悉下CNN分类网络的发展历程,一些trick的更替:
1)、Lenet,1986年
2)、Alexnet,2012年
3)、GoogleNet,2014年
4)、VGG,2014年
5)、ResNet,也有人称呼残差网络,2015年
这个几个网络是都是深度学习在图像领域的经典之作,在pc上实现了它们,训练它们,同时你又仔细推敲看看他们的网络结构。
阶段目的:在实际当中独立使用它们,也可以结合传统的图像处理技术使用它们。一句话:你已经入门了
学习的几个误区:
1、死嗑线性代数、概率论、微积分这些理论知识。
使用深度学习的目的是处理实际工程问题,最重要的是怎么用。一开始不会用就去推导这些公式、求原理,有点舍本逐末。另一个重要的原因是,复杂的公式、原理会把初学者搞晕的,打击初学者的积极性,而且理论不和实践结合,很难理解;所以建议学用结合、边用边学。
2、比较哪种网络好
比较哪个深度模型最优是没有意义的。因为没有一种模型是万能的,得根据具体数据集的类型特征、具体使用场景来决定采用什么模型。
3、一开始就自己设计网络
深度学习各个应用领域都有很多经典的网络,都经过大量验证过的,一句话,没啥问题,用起来效果挺好。我一般拿过来用,改改输入, 调调参数,在已有模型的基础上,微调微调即可。