生活随笔
收集整理的這篇文章主要介紹了
深度学习(05)--典型CNN结构(VGG13,16,19)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 目錄
- 1.VGG結構
- 2.VGG結構解釋
- 3.3*3卷積核的優(yōu)點
- 4.VGG的muti-scale方法
- 5.VGG的應用
目錄
1.VGG結構
? LeNet5用大的卷積核來獲取圖像的相似特征
? AlexNet用99、1111的濾波器
? VGG 巨大的進展是通過依次采用多個 3×3 卷積,模仿出更大的感受野(receptive field)效果,例如 5×5 與 7×7。
? 這些思想也被用在更多的網(wǎng)絡架構中,如 Inception 與 ResNet。
VGG16的效果最好
- VGG16 的第 3、4、5 塊(block):256、512、512個 3×3 濾波器依次用來提取復雜的特征。
- 其效果就等于是一個帶有 3 個卷積層的大型的 512×512 大分類器。
2.VGG結構解釋
(1)VGG全部使用33卷積核、22池化核,不斷加深網(wǎng)絡結構來提升性能。
(2)A到E網(wǎng)絡變深,參數(shù)量沒有增長很多,參數(shù)量主要在3個全連接層。
(3)訓練比較耗時的依然是卷積層,因計算量比較大。
(4)VGG有5段卷積,每段有2~3個卷積層,每段尾部用池化來縮小圖片尺寸。
(5)每段內(nèi)卷積核數(shù)一樣,越靠后的段卷積核數(shù)越多:64–128–256–512–512。
3.3*3卷積核的優(yōu)點
4.VGG的muti-scale方法
- LRN層作用不大。
- 越深的網(wǎng)絡效果越好。
- 11的卷積也是很有效的,但是沒有33的卷積好
- 大的卷積核可以學習更大的空間特征
1*1的卷積的作用
1.實現(xiàn)跨通道的交互和信息整合
- 1×1的卷積層(可能)引起人們的重視是在NIN的結構中,論文中林敏師兄的想法是利用MLP代替?zhèn)鹘y(tǒng)的線性卷積核,從而提高網(wǎng)絡的表達能力。文中同時利用了跨通道pooling的角度解釋,認為文中提出的MLP其實等價于在傳統(tǒng)卷積核后面接cccp層,從而實現(xiàn)多個feature map的線性組合,實現(xiàn)跨通道的信息整合。
2.進行卷積核通道數(shù)的降維
- 降維( dimension reductionality )。比如,一張500 X500且厚度depth為100 的圖片在20個filter上做1X1的卷積,那么結果的大小為500X500X20。
- 加入非線性。卷積層之后經(jīng)過激勵層,1X1的卷積在前一層的學習表示上添加了非線性激勵( non-linear activation ),提升網(wǎng)絡的表達能力;
5.VGG的應用
VGG9、VGG11、VGG13、VGG16、VGG19
出現(xiàn)了梯度消失的問題
只在第一個卷積(name=’block1_conv1’)后面加了BatchNormalization就解決了
def VGG16(input_shape
=(64,64,3), classes
=6):X_input
= Input
(input_shape
)"block 1"X
= Conv2D
(filters
=4, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block1_conv1')(X_input
)X
= BatchNormalization
(axis
=3)(X
)X
= Conv2D
(filters
=4, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block1_conv2')(X
)X
= MaxPooling2D
((2,2), strides
=(2,2), name
='block1_pool')(X
)"block 2"X
= Conv2D
(filters
=8, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block2_conv1')(X
)X
= BatchNormalization
(axis
=3)(X
)X
= Conv2D
(filters
=8, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block2_conv2')(X
)X
= MaxPooling2D
((2,2), strides
=(2,2), name
='block2_pool')(X
)"block 3"X
= Conv2D
(filters
=16, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block3_conv1')(X
)X
= Conv2D
(filters
=16, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block3_conv2')(X
)X
= Conv2D
(filters
=16, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block3_conv3')(X
)X
= MaxPooling2D
((2,2), strides
=(2,2), name
='block3_pool')(X
)"block 4"X
= Conv2D
(filters
=32, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block4_conv1')(X
)X
= Conv2D
(filters
=32, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block4_conv2')(X
)X
= Conv2D
(filters
=32, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block4_conv3')(X
)X
= MaxPooling2D
((2,2), strides
=(2,2), name
='block4_pool')(X
)"block 5"X
= Conv2D
(filters
=32, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block5_conv1')(X
)X
= Conv2D
(filters
=32, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block5_conv2')(X
)X
= Conv2D
(filters
=32, kernel_size
=(3,3), strides
=(1,1), activation
='relu', padding
='same', name
='block5_conv3')(X
)X
= MaxPooling2D
((2,2), strides
=(2,2), name
='block5_pool')(X
)"flatten, fc1, fc2, fc3"X
= Flatten
(name
='flatten')(X
)X
= Dense
(256, activation
='relu', name
='fc1')(X
)X
= Dense
(256, activation
='relu', name
='fc2')(X
)X
= Dense
(classes
, activation
='softmax', name
='fc3')(X
)model
= Model
(inputs
=X_input
, outputs
=X
, name
='VGG16')return model
總結
以上是生活随笔為你收集整理的深度学习(05)--典型CNN结构(VGG13,16,19)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。