论文地址: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
仿射变换:
加权求和:
非线性激活函数:
输出:vector
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] [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] [None, 6, 6, 32] 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)的输出向量 ,向量维度[8, 1]
输出:,维度为[16, 1]
shape:[None, 1152, 8, 1] [None, 10, 16, 1]
parameters:
1152 * 10个 : 1152 * 10 * 8 * 16 = 1,474,560
1152 * 10个 : 1152 * 10 * 1 = 11,520