卷積網路的block VGG 使用基礎卷積塊的網路

2021-10-12 20:18:31 字數 1822 閱讀 7660

alexnet在lenet的基礎上增加了卷積層,但alexnet對卷積視窗、輸出通道數和構造順序均做了大量的調整。

雖然alexnet指明了深度卷積神經網路有出色的表現,但並沒有提供簡單的規則以指導後來的研究者如何設計新的網路。

vgg網路是oxford的visualgeometrygroup組提出的,vgg網路是實驗室名字的縮寫。vgg**闡述了其在imagenet 2014挑戰賽上的一些發現,提出了可以通過重複使用基礎塊(block)來構造深度模型。

一般地,構建cnn基礎塊的規律是:

乙個卷積層

乙個非線性啟用函式,例如relu

乙個池化層,例如最大池化層

vgg**中提出的方法是:連續使用數個相同的填充為1、視窗形狀為3 × 3的卷積層後緊接乙個步幅為2、視窗形狀為2 × 2的最大池化層。卷積層保持輸入和輸出的高和寬不變,而池化層對輸入的尺寸減半。

對於給定的感受野(與輸出有關的輸入的區域性大小),採用堆積的小卷積核優於採用大的卷積核,因為增加網路深度可以保證網路能學習到更複雜的模式,而且整個模型的引數更少,代價還比較小。

我們使用vgg_block()方法來實現這個基礎的vgg塊,這個方法有幾個引數:該塊中卷積層的數量、輸入輸出通道數。

vgg與alexnet、lenet類似,vgg網路分為兩大部分,前半部分是卷積層和池化層模組,後半部分是全連線層模組。

卷積層和池化層模組由多個基礎塊連線組成,即vgg_block()方法返回的基礎塊,我們只需要給vgg_block()方法提供:該塊中包含的卷積層數,該塊的輸入和輸出通道數。我們定義變數conv_arch,該變數是乙個列表,列表中每個元素為元組(a list of tuples)。conv_arch定了每個vgg塊裡卷積層個數和輸入輸出通道數。全連線層模組則跟alexnet中的一樣。下面的vgg()方法會返回整個vgg網路,輸入引數是conv_arch

現在我們構造乙個vgg網路。它有5個卷積塊,前2塊使用單卷積層,而後3塊使用雙卷積層。第一塊的輸入輸出通道分別是1和64,第一塊的輸入通道數根據所使用的資料集而定,fashion-mnist資料的通道數為1,對於imagenet等資料集,輸入通道數一般為3。之後每次對輸出通道數翻倍,直到變為512。因為這個網路使用了8個卷積層和3個全連線層,所以經常被稱為vgg-11。

在**層面,定義變數conv_arch,中間包含多個元組,每個元組第乙個元素為該塊的卷積層個數,第二個元素為輸出通道數。

conv_arch = ((1, 64), (1, 128), (2, 256), (2, 512), (2, 512))

net = vgg(conv_arch)

模型的訓練過程與之前分享的lenet、alexnet基本相似。源**已經發布到了github:

vgg通過多個基礎卷積塊來構造網路。基礎塊需要定義卷積層個數和輸入輸出通道數。

vgg**認為,更小(例如3 × 3)的卷積層比更大的卷積層效率更高,因為可以增加更多的層,同時引數又不至於過多。

參考資料

simonyan, k., & zisserman, a. (2014). very deep convolutional networks for large-scale image recognition.

卷積神經網路文字輸入 使用卷積神經網路進行文字分類

cnn 是卷積神經網路,通常用於影象領域,並且在影象分類取得非常好的效果。2014 年 yoon kim 在 convolutional neural networks for sentence classification 中將 cnn 的思想應用到文字處理中,後續很多把 convnet 用在 n...

卷積神經網路的卷積操作

卷積的運算可以分為反轉 平移,相乘,求和。在影象處理中,影象是乙個大矩陣,卷積模板是乙個小矩陣。按照上述過程,就是先把小矩陣反轉,然後平移到某一位置,小矩陣的每乙個小格對應大矩陣裡面的乙個小格,然後把對應小格裡面的數相乘,把所有對應小格相乘的結果相加求和,得出的最後結果賦值給小矩陣 小格對應的影象中...

卷積神經網路的卷積操作

卷積的運算可以分為反轉 平移,相乘,求和。在影象處理中,影象是乙個大矩陣,卷積模板是乙個小矩陣。按照上述過程,就是先把小矩陣反轉,然後平移到某一位置,小矩陣的每乙個小格對應大矩陣裡面的乙個小格,然後把對應小格裡面的數相乘,把所有對應小格相乘的結果相加求和,得出的最後結果賦值給小矩陣 小格對應的影象中...