1. 程式人生 > >keras 自帶VGG16 net 引數分析

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’引數給定.(表示訓練一個新網路)