十种卷积神经网络(CNN)框架的详细可视化分析 &迁移神经网络的实际使用(基于Keras)

本小妞迷上赌 提交于 2020-03-08 20:18:21

十种卷积神经网络框架

1. 典型深度学习框架

1.1 概述

  • 论文发表时间:
    在这里插入图片描述

  • Keras 可以使用的6种模型

    在这里插入图片描述

现在已经不止6种:Keras Documentation

“[m]ost of this progress is not just the result of more powerful hardware, larger datasets and bigger models, but mainly a consequence of new ideas, algorithms and improved network architectures.” (Szegedy et al, 2014)

1.2 可视化解读十种CNN框架

在这里插入图片描述

1.2.1 LeNet-5(1998)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200308172729411.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JvYmluX1Bp,size_16,color_FFFFFF,t_70 =500x

LeNet-5 是最简单的框架之一,由2个卷积层和三个全连接层组成(因此叫做”5“——这种使用据卷积层和全连接层的数量来命名是一种很常普遍的做法)

创新点
这个模型成为了一个标准”模板“:堆叠卷积层和池化层,最后以一层或者多层的全连接层结尾。

发表

1.2.2 AlexNet(2012)

在这里插入图片描述
参数量60M的AlexNet有八层网络——5层卷积核3层全连接层。
相比LeNet-5来说,AlexNet也不过是多了几层网络。作者在论文中提到,他们“在ImageNet子集上训练了到目前为止最大的神经网络之一”。

创新点:

  • 第一次使用Rectified Linear Units (ReLUs) 作为激活函数

发表:

1.2.3 VGG16(2014)

在这里插入图片描述
相信你也注意到了CNNs网络的层数变得越来越深。这是因为提升提升深度神经网络模型
性能最直接的方式就是提升它的大小(Szegedy et. al)。
VGG16由 Visual Geometry Group (VGG) 的人提出,它包含13个卷积层和3个全连接层,激活函数沿用的AlexNet的ReLU。
相比AlexNet,VGG16堆叠了更多地层,同时使用了更小的卷积核(2×2 and 3×3))。VGG16模型参数的大小是138M,同时需要500M的储存空间!他们也训练了另外一个网络:VGG19。

创新点:

1.2.4 Inception-v1(2014)

注:这个模型的名称(Stem and Inception)并没有在这个版本使用,而是在其后续版本,Inception-v4 和 Inception-ResNets出来之后才这么叫。
在这里插入图片描述
这个层数为22、参数大小为5M的网络叫做 Inception-v1。网络中的网络方法(参见 Appendix)被大量使用——一个研究稀疏结构的产物——Inception 模块。
每个模块呈现了三种思想:

  1. 拥有使用了不同大小卷积核( 1 × 1、3 × 3、5 × 5 等)的平行卷积层网络,并将得 到的特征映射在深度上拼接(堆叠)起来作为输出特征映射。(受 Arora et al的气启发-Provable bounds for learning some deep representations
  2. 1×1卷积用于维数降低( 在进行 3 × 3、5 × 5 的卷积之前),以除去计算瓶颈。(1 × 1 的卷积相当于先进行一次特征抽取)
  3. 由于激活函数来自于1x1的卷积,因此它也增加了非线性性。(这个思路来自paper
  4. The authors also introduced two auxiliary classifiers to encourage discrimination in the lower stages of the classifier, to increase the gradient signal that gets propagated back, and to provide additional regularisation. The auxiliary networks (the branches that are connected to the auxiliary classifier) are discarded at inference time.

It is worth noting that “[t]he main hallmark of this architecture is the improved utilisation of the computing resources inside the network.”

创新点:

  • 利用密集的模块构建网络。使用了包含了卷积层的 modules or blocks 构建网络,而不是堆叠卷积层。故名”为盗梦空间“。((参照2010年由莱昂纳多·迪卡普里奥主演的的科幻电影盗梦空间)

发表:

  • Paper: Going Deeper with Convolutions
  • Authors: Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich. Google, University of Michigan, University of North Carolina
  • Published in: 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)

1.2.5 Inception-v3(2015)

在这里插入图片描述
待续~

2. 深度迁移学习攻略

应对过拟合

应对过拟合的方法:

  • 增大可以用于训练的数据量
    方法之一:数据增强
  • 让模型能够储存更多地有效信息(量多,但要尽量不相关)
    两个方法:通过控制模型层的数量和层的大小来控制模型中参数的选择;另一种方法是使用权重正则化,如可以使得模型参数值更小的L1或L2正则化。
  • drop out

数据增强

from keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
        rotation_range=40,
        width_shift_range=0.2,
        height_shift_range=0.2,
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest')
  • rotation_range is a value in degrees (0-180), a range within which to randomly rotate pictures
  • width_shift and height_shift are ranges (as a fraction of total width or height) within which to randomly translate pictures vertically or horizontally
  • rescale is a value by which we will multiply the data before any other processing. Our original images consist in RGB coefficients in the 0-255, but such values would be too high for our models to process (given a typical learning rate), so we target values between 0 and 1 instead by scaling with a 1/255. factor.
  • shear_range is for randomly applying shearing transformations
  • zoom_range is for randomly zooming inside pictures
  • horizontal_flip is for randomly flipping half of the images horizontally --relevant when there are no assumptions of horizontal assymetry (e.g. real-world pictures).
  • fill_mode is the strategy used for filling in newly created pixels, which can appear after a rotation or a width/height shift.

例子:

from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img

datagen = ImageDataGenerator(
        rotation_range=40,
        width_shift_range=0.2,
        height_shift_range=0.2,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest')

img = load_img('data/train/cats/cat.0.jpg')  # this is a PIL image
x = img_to_array(img)  # this is a Numpy array with shape (3, 150, 150)
x = x.reshape((1,) + x.shape)  # this is a Numpy array with shape (1, 3, 150, 150)

# the .flow() command below generates batches of randomly transformed images
# and saves the results to the `preview/` directory
i = 0
for batch in datagen.flow(x, batch_size=1,
                          save_to_dir='preview', save_prefix='cat', save_format='jpeg'):
    i += 1
    if i > 20:
        break  # otherwise the generator would loop indefinitely

在这里插入图片描述
参考:

博客

  1. Keras Documentation
  2. Illustrated: 10 CNN Architectures
  3. keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)
  4. 深度学习在表情识别中的应用
  5. Building powerful image classification models using very little data

论文

  1. Gradient-Based Learning Applied to Document Recognition
  2. ImageNet Classification with Deep Convolutional Neural Networks
  3. Very Deep Convolutional Networks for Large-Scale Image Recognition
  4. Going Deeper with Convolutions
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!