深度學習之膠囊網絡CapsNet

論文地址:https://arxiv.org/abs/1710.09829
github地址:https://github.com/naturomics/CapsNet-Tensorflow


膠囊網絡的理解

我的理解:膠囊網絡是CNN的升級版,它們有很多相似的地方和根本的不同點。
CNN:每個神經元的輸出是標量
CapsuleNet:每個神經元的輸出是向量,也就是多個標量的結合

類比一下CNN和CapsNet:
CNN的過程是(convolution)加權求和,激活函數(relu),獲取更重要的信息(maxpooling)。
CapsNet是加權求和(向量的加權和),激活函數(squashing),獲取更重要的信息(dynamic routing)


公式

輸入:vector uiu_i

仿射變換:u^ji=Wijui\hat{u}_{j|i} = W_{ij}u_i

加權求和:sj=iciju^jis_j = \sum_ic_{ij}\hat{u}_{j|i}

cij=exp(bij)kexp(bik)c_{ij} = \frac{exp{(b_{ij})}}{\sum_k{exp{(b_{ik})}}}

bij=bij+u^ji vjb_{ij} = b_{ij} + \hat{u}_{j|i} \ v_j

非線性激活函數:vj=s21+s2sjsj2v_j = \frac{{||s||}^2}{1+{||s||}^2}\frac{s_j}{{||s_j||}^2}

輸出:vector vjv_j

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述


CapsNet模型

兩個卷積層(Conv 1, PrimaryCaps),一個全連接層(DigitCaps)

L1. Conv 1層:常規的卷積層,起像素級局部特徵檢測作用

input_size: 28 * 28 * 1
kernel_size: 9 * 9
conv_stride: 1 * 1
Channels : 256
activation: Relu
shape: [None, 28, 28, 1] \rightarrow [None, 20, 20, 256]
parameters: 9 * 9 * 256 + 256 = 20,992

L2. PrimaryCaps層

input_size: 20 * 20 * 256
kernel_size: 9 * 9
conv_stride: 2 * 2
Channels : 32
non-linearity function: Squashing function
8 convolutional units: 256=8 * 32
在這裏插入圖片描述

shape:[None, 20, 20, 256] \rightarrow [None, 6, 6, 32] \rightarrow 8個並行卷積層:
[None, 6, 6, 1, 32]
[None, 6, 6, 1, 32]

[None, 6, 6, 1, 32]

對每個卷積層的各個通道在第四個維度上進行合併

=[None, 6, 6, 8, 32]
在這裏插入圖片描述

parameters:(9 * 9 * 256) * 8 * 32 + 8 * 32 = 5,308,672

L3. DigitCaps層

10 capsules with 16D vector output, fully connected
輸入:PrimaryCaps層所有capsule(6 * 6 * 32)的輸出向量 uiu_i,向量維度[8, 1]
輸出:vjv_j,維度爲[16, 1]
shape:[None, 1152, 8, 1] \rightarrow [None, 10, 16, 1]
parameters:
1152 * 10個 WijW_{ij}: 1152 * 10 * 8 * 16 = 1,474,560
1152 * 10個 cijbij\frac{c_{ij}}{b_{ij}}: 1152 * 10 * 1 = 11,520
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章