Deep Learning 读书笔记(七):关于CNN的实际例子

来源:互联网 发布:za淘宝旗舰店是真的吗 编辑:程序博客网 时间:2024/05/17 01:33

        昨天晚上开了组会,主要是给新成员入下门,讲完之后,感觉大家理解上还是有些困难,入门总是会辛苦些,但确实有些概念会感觉有些抽象。因为打算从CNN入手,所以这篇博客呢,会结合CNN的具体例子,说说整个网络到底是一个怎样的流程。当然咯,想要了解细节,还得回到我之前写的那篇博客中去关于CNN的各种。这篇博客主要结合了下面三篇论文:

        (1)Multi-column Deep Neural Networks for Image Classification

        (2)Multi-Column Deep Neural Network for Traffic Sign Classification

        (3)Flexible,High Performance Convolutional Neural Networks for Image Classification

        从题目中就可以看出,这三篇主要是讲多列CNN,这个思想还是很简单的:就是构建多个CNN模型,输入训练数据,综合各个模型的输出结果,最后给出最终的结果。类似于一个提升模型。其实,这样做也有一定的生物依据,试想,我们人脑中的视觉神经不可能只有一条路径吧。有文章说明:即使我们不对CNN组合起来的网络进行任何的优化,只是对这些网络的输出取平均值,也能够取得比较好的效果。而本文中也正是采取这样的做法。

        整个模型的训练过程如下:

        从图中可以看出,在训练开始之前,需要对训练数据进行预处理。这个预处理过程并不是一个随机的过程,对图片采取的平移、旋转和缩放的程度是随机的值。一般来说,对图片进行平移的值会是,对图片进行缩放的比例会是0.9-1.1,而旋转的程度是。之后会对图片进行双线性插值来获取原图片大小的图片作为新的训练数据。

       在模型初始化时,对不同列的CNN都是赋予随机的初始值。试验发现,如果我们使用相同的训练数据来训练这些多列的CNN,会导致训练误差会有较强的关联性。因此,我们需要为这些不同列的CNN输入不同的训练数据。要达到这样的目的其实很简单,只需要在预处理阶段使用不同的方法,或是不同的值就可以。

        有试验表明,如果使用相同的数据来训练一个多列CNN和一个单列的CNN,多列CNN的效果要比单列的好,这就表明了并不是因为训练数据上的原因而使得多列CNN的效果要更好。

       文章中还证明了无监督的初始化方法或是预训练的方法都是没有必要的。目前,Deep Learning的研究热点就在于无监督或是半监督方法的研究,因为大量的数据都是无标签的,无监督或是半监督的方法应用的并不是很广泛。但是否对于CNN这样一种网络,网络的结构就预示着无监督的方法就是没有必要的呢?这是非常值得思考的一点。

        整个网络的模型结构如下图示:

 

        接下来,我们就来仔细分析下这个图。首先对于输入图像,我们需要将其分成3个channel来进行处理。在第一层卷积层中,模型感受野的大小为7x7,同时使用了300个滤波器。这样,对于卷积之后每一个图像的大小为42x42(48-7+1,这里使用的是传统的卷积方法,只是向右移动一个单元)。之前,是将图像分成3个channel来处理,我们可以理解为提取出了图像的三个特征,而后一层中提取出了图像的100个特征,联系到这里使用了300个滤波器,我们可以得知,前一层的map与后一层的map之间是全连接的关系。对于第二层池化层,我们所使用的池化区域的大小为2x2,所以池化后,图片的大小就变为了21x21。L2到L3之间的变化与输入层到L1之间的变化是相同的,前一层的map与后一层的map之间也是全连接的关系,不同之处就是卷积区域的大小发生了变化。之后也没有什么特殊的变化过程需要说明的了。最后就是在L6中,池化之后区域的大小为3x3,我们怎样将其变成一维的向量呢?有两种选择方法,第一,就是对其使用一个3x3的卷积,第二,就是使用一个全连接层,将其过渡到1x1的大小。这里选择的就是第二种方法。最后,是一个softmax层,模型输出的大小与所需分类的数目是相等的。

        我们可以参照这样一种分析方法,来对之前那篇博客中ImageNet模型进行分析,因为那篇文章中所使用的trick比较多,如果能准确的分析出来,对CNN还是能够有比较深的理解。

        其实,现在很多关于Deep Learning的代码都是通过GPU来跑的,特别是与图像有关的一些代码,因为GPU对于二维卷积操作有着很好的优化,能够使得训练速度有着显著的提升。现在的两大显卡厂商NVIDIA和AMD对于GPU编程都提供有很好的借口,Deep Learning也有方向来做算法性能的优化。所以想要在Deep Learning方面有较高的造诣,这一方面也是必不可少的。这一方面,我就不能提供给大家更多的东西了。

        这一篇水文终于结束了。

       

0 0
原创粉丝点击