keras 自带VGG16 net 参数分析

对VGG16 这类keras自带的网络分析有感,写在这里.
查看VGG16在keras中的说明文档,可以这样:

from keras.applications.vgg16 import VGG16

然后(在jupyter notebook, jupyter lab或Ipython中)

? VGG16

可查看VGG16的使用帮助.

Signature: VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
Docstring:
Instantiates the VGG16 architecture.

Optionally loads weights pre-trained on ImageNet. Note that when using TensorFlow, for best performance you should set `image_data_format='channels_last'` in your Keras config at ~/.keras/keras.json.
翻译:
可以加载在IMAGENET上预训练的权值. 当使用tensorflow作为backend时, 应该在keras.json中设置" `image_data_format='channels_last'.

The model and the weights are compatible with both TensorFlow and Theano. The data format convention used by the model is the one specified in your Keras config file.
翻译:
模型和权重文件在tensorflow和theano backend下都兼容. 但是数据格式的习惯需要在keras config文件中设置(如上).

# Arguments  参数介绍:
    include_top: whether to include the 3 fully-connected layers at the top of the network.

    weights: one of `None` (random initialization),  'imagenet' (pre-training on ImageNet),
          or the path to the weights file to be loaded.
    input_tensor: optional Keras tensor (i.e. output of `layers.Input()`)
        to use as image input for the model.
    input_shape: optional shape tuple, only to be specified
        if `include_top` is False (otherwise the input shape
        has to be `(224, 224, 3)` (with `channels_last` data format)
        or `(3, 224, 224)` (with `channels_first` data format).
        It should have exactly 3 input channels,
        and width and height should be no smaller than 48.
        E.g. `(200, 200, 3)` would be one valid value.
    pooling: Optional pooling mode for feature extraction
        when `include_top` is `False`.
        - `None` means that the output of the model will be
            the 4D tensor output of the
            last convolutional layer.
        - `avg` means that global average pooling
            will be applied to the output of the
            last convolutional layer, and thus
            the output of the model will be a 2D tensor.
        - `max` means that global max pooling will
            be applied.
    classes: optional number of classes to classify images
        into, only to be specified if `include_top` is True, and
        if no `weights` argument is specified.

# Returns
    A Keras model instance.

# Raises
    ValueError: in case of invalid argument for `weights`,
        or invalid input shape.
File:      c:\anaconda3\lib\site-packages\keras-2.1.5-py3.6.egg\keras\applications\vgg16.py
Type:      function
  • include_top: boolean (True or False)
    是否包含最上层的全连接层. 因为VGGNET最后有三个全连接层, 因此,这个选项表示是否需要最上面的三个全连接层. 一般网络最后都会有全连接层, 最后一个全连接层更是设定了分类的个数, loss的计算方法, 并架设了一个概率转换函数(soft max). 其实soft max的作用就是将输出转换为各类别的概率,并计算loss.
    可以这么说, 最上面三层使用来进行分类的, 其余层使用来进行特征提取的. 因此如果include_top=False,也就表示这个网络只能进行特征提取. 不能在进行新的训练或者在已有权重上fine-tune.
  • weights: ‘None’ / ‘imagenet’ / path (to the weight file)
    None表示没有指定权重,对网络参数进行随机初始化.
    ‘imagenet’ 表示加载imagenet与训练的网络权重.
    ‘path’ 表示指向权重文件的路径.
    VGG16 的框架是确定的, 而其权重参数的个数和结构完全由输入决定.
    如果weight = None, 则输入尺寸可以任意指定,(范围不得小于48, 否则最后一个卷积层没有输出).
    如果 weight = ‘imagenet’, 则输入尺寸必须严格等于(224,224), 权重的规模和结构有出入唯一决定, 使用了imagenet的权重,就必须使用训练时所对应的输入, 否则第一个全连接层的输入对接不上. (例如, 原来网络最后一个卷基层的输出为 300, 全连接层的神经元有1000个,则这里权重的结构为300X1000), 而其他的出入不能保证卷基层输出为300, 则对接不上会报错).
    如果 weight = ‘path’, 则输入必须和path对应权值文件训练时的输入保持一致.
  • input_tensor: 图片tonsor输入项
  • input_shape: tuple
    如果include_top = False(表示用网络进行特征提取), 此时需要指定输入图片尺寸. 如果include_top = True(表示网路被用来进行重新训练或fine-tune), 则图片输入尺寸必须在有效范围内(width & height 大于48)或和加载权重训练时的输入保持一致.
  • pooling: 当include_top = False(网络被用于特征提取时改参数有效)
    (纯自己理解, 可能有误).
    最后一个卷基层的输出应该是一个4D的向量.(M,1,w’,h’), 其中w’和h’表示卷积过后得到的基本尺寸. 可以这样想象, 待卷积的目标是一个(N, w, h)的矩阵. 每卷积一次都是在这个矩阵的(n, w,h)上进行卷积, n表示卷积核的深度(2D=2, 3D=3). 最后依然会得到(M, w’,h’)这样一个维度的矩阵作为卷基层的输出. 把每一个2D的(w’, h’)看做一个维度, 那么最终输出就是4D的(M,1,w’,h’).那么:
    pooling = None, 表示对输出的特征不作处理,依然是4D的.
    pooling = ‘avg’, 表示在M维度进行平均, 最终得到的是一个(1,1,w’,h’)的特征输出.
    pooling = ‘max’, 亦然.
  • classes: 要训练的类别数. 仅当include_top = True, 没有’weights’参数给定.(表示训练一个新网络)

你可能感兴趣的:(机器学习,机器学习,神经网路,VGG16)