1. 程式人生 > >【論文復現】VGG框架講解以及VGG16復現,遷移學習自己的資料。tensorflow。

【論文復現】VGG框架講解以及VGG16復現,遷移學習自己的資料。tensorflow。

論文連結,至於論文我沒仔細看,我只學習了其框架。

但是需要注意的是:

在訓練期間,ConvNets的輸入是固定大小的224×224 RGB影象。 唯一預處理是從每個畫素中減去在訓練集上計算的平均RGB值,(eg:VGG16是:VGG_MEAN = tf.constant([123.68, 116.779, 103.939], dtype=tf.float32))處理時候轉換成了RGB→BGR格式。影象通過一堆卷積(轉換)層,使用具有非常小的感知域的濾波器: 3×3(這是捕捉左/右,上/下,中心概念的最小尺寸)。 在其中一種配置中,我們還使用1×1卷積濾波器,可以看作是輸入通道的線性變換(後面是非線性)。 卷積步幅固定為1個畫素; 卷積層輸入的空間填充使得在卷積之後保持空間解析度,即對於3×3個卷積層,填充是1個畫素。 空間池由五個最大池組執行,這些層跟隨一些轉換。 圖層(並非所有轉換圖層都跟隨最大池)。 最大池化在2×2畫素視窗上執行,步幅為2。

卷積層(在不同的體系結構中具有不同的深度)的stack之後是三個完全連線(FC)層:前兩個層各有4096個通道,第三個層執行1000路ILSVRC分類,因此包含1000個通道(每個類一個)。最後一層是soft-max層。在所有網路中,完全連線層的配置是相同的。所有隱藏層都具有整流(ReLU)非線性特性。網路(除了一個)都不包含本地響應規範化(LRN)規範化,因為作者嘗試了這種規範化不會提高ILSVRC資料集的效能,但會增加記憶體消耗和計算時間。

The convolutional layer parameters are denoted as “conv receptive field size - number of channels ”

vgg有五種模型:ABCDE,D就是VGG16,E就是VGG19。19層數的計算是conv層+FC。

卷積:conv:f=3*3,s=1*1,p=1*1;Maxpool: f=2*2,s=2*2,p=0

卷積核:是每stack層卷積核的個數由首階段64,逐層增一倍至512

1.error:tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM when allocating tensor with shape[64,147,147,64]

出現以上類似的錯誤,如有多塊GPU,首先考慮是不是GPU指定問題,仔細看程式開始地方用的是哪個GPU,比如Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla K40c, pci bus id: 0000:82:00.0)

我這裡是Tesla,因為在程式碼開頭新增如下:設定為0或者1也可以,但由於有時候沒用,故建議寫其ID,

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0000:82:00.0"
#os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"

可在終端輸入:nivida-smi檢視。中間是其Id,可看到是否使用:On,off

還可能因為模型中的batch_size值設定過大,導致記憶體溢位,batch_size是每次送入模型中的值,由於GPU的關係,一般設為16,32,64,128。