重複元素的卷積神經網路(VGG)

2021-10-06 03:05:37 字數 2978 閱讀 5819

名字**於**作者所在的實驗室visual geometry group,vgg提出了可以通過重複使用簡單的基礎塊來構建深度模型的思路。

我們常見的vgg網路有,vgg-11,vgg-16,vgg-19,不計算池化層數量,共有3個全連線層,(11-3)、(16-3)、(19-3)個卷積層。

這裡拿vgg-11舉例,那麼就有8個卷積層和3個全連線層。

vgg塊的組成規律是:連續使用數個相同的填充為1、視窗形狀為3×3的卷積層後接上乙個步幅為2、視窗形狀為2×2的最大池化層。卷積層保持輸入的高和寬不變,而池化層則對其減半。

def

vgg_block

(num_convs, num_channels)

:# (卷積次數,輸出通道數)

blk = tf.keras.models.sequential(

)for _ in

range

(num_convs)

:# 重複的卷積

blk.add(tf.keras.layers.conv2d(num_channels, kernel_size=

3, padding=

'same'

, activation=

'relu'))

blk.add(tf.keras.layers.maxpool2d(pool_size=

2, strides=2)

)return blk

每一次的卷積後,使用池化層壓縮資料和引數的量,並減小過擬合。

應該也有一定的處理影象敏感的作用。

vgg-11

import tensorflow as tf

# vgg 可以通過重複使用簡單的基礎塊來構建深度模型

defvgg_block

(num_convs, num_channels)

:# (卷積次數,輸出通道數)

blk = tf.keras.models.sequential(

)for _ in

range

(num_convs)

:# 重複的卷積

blk.add(tf.keras.layers.conv2d(num_channels, kernel_size=

3, padding=

'same'

, activation=

'relu'))

blk.add(tf.keras.layers.maxpool2d(pool_size=

2, strides=2)

)return blk

# 實現 vgg11

conv_arch =((

1,64)

,(1,

128),(

2,256),(

2,512),(

2,512)

)def

vgg(conv_arch)

: net = tf.keras.models.sequential(

)# 卷積過程,8個卷積層

for(num_convs, num_channels)

in conv_arch:

net.add(vgg_block(num_convs, num_channels)

)# 3個全連線層,vgg11=8+3

net.add(tf.keras.models.sequential(

[ tf.keras.layers.flatten(),

tf.keras.layers.dense(

4096

, activation=

'relu'),

tf.keras.layers.dropout(

0.5)

, tf.keras.layers.dense(

4096

, activation=

'relu'),

tf.keras.layers.dropout(

0.5)

, tf.keras.layers.dense(

10, activation=

'sigmoid')]

))return net

net = vgg(conv_arch)

# 觀察每一層的形狀,輸入形狀 ( 224 × 224 × 1 )

x = tf.random.uniform((1

,224

,224,1

))for blk in net.layers:

x = blk(x)

print

(blk.name,

'output shape:\t'

, x.shape)

網路結構形狀:

輸入的是:(1,224,224,1)

# input_shape:(1, 224, 224, 1)

sequential_1 output shape:(1

,112

,112,64

)sequential_2 output shape:(1

,56,56

,128

)sequential_3 output shape:(1

,28,28

,256

)sequential_4 output shape:(1

,14,14

,512

)sequential_5 output shape:(1

,7,7

,512

)sequential_6 output shape:(1

,10)

卷積神經網路之VGG

vgg可以看成是加深版的alexnet,整個網路由卷積層和全連線層疊加而成,和alexnet不同的是,vgg中使用的都是小尺寸的卷積核 3 times3 結構簡潔,如下圖vgg 19的網路結構 對比,前文介紹的alexnet的網路結構圖,是不是有種賞心悅目的感覺。整個結構只有 3 times3 的卷...

VGG神經網路

第一次使用多個小的卷積核 來代替大的卷積核,兩個3 3代替乙個5 5,三個3 3代替7 7。使用多個小的卷積核可以有效地降低神經網路所需要的的引數。並且並沒減少的感受野。唯一的不足是,在進行反向傳播時,中間的卷積層可能會導致占用更多的記憶體。感受野計算公式 p i 1 pi kernel 1 str...

深度卷積神經網路VGG 學習筆記

author karen simonyan andrew zisserman years 2014,published as a conference at iclr 2015 vggnet是2014年 imagenet large scalevisual recognition challenge...