keras 自帶VGG16 net 引數分析
阿新 • • 發佈:2019-02-08
對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’引數給定.(表示訓練一個新網路)