名称:全连接。意思就是输出层的神经元和输入层的每个神经元都连接。
例子: AlexNet 网络中第一个全连接层是这样的:
layer {
name: "fc6"
type: "InnerProduct"
bottom: "pool5"
top:"fc6"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
inner_product_param {
num_output: 4096
weight_filler {
type: "gaussian"
std: 0.005
}
bias_filler {
type: "constant"
value: 0.1
}
}
}
其中 bottom: "pool5"就是这个全连接层的输入,而top:"fc6"就是这个全连接层的输出。值得注意的地方是这个bottom: "pool5"是个“二维平面“式的数据,也就是N X M的数组样式,但是top:"fc6"确是一个K X 1或者 1 X K的向量,因此在实现中,程序会将bottom: "pool5"拉成N*M X 1或者1 X M*N的向量。
这个输入向量是什么呢?对,是特征图,符号化就是X(1)、X(2)、X(3)...X(N*M),括号内是X的下标。
那么输出呢?如果这个全连接层不是最后一个全连接层那么它也是特征图,符号化就是Y(1)、Y(2)、Y(3)...Y(K),括号内是Y的下标。
那么输入和输出是怎么联系到一块呢?答案就是W权重了,也叫滤波器,也叫卷积核。
那么在全连接层里怎么没看到这个滤波器的大小呢?答案是:不需要,因为它就是全连接啊。
一般情况下,输入神经元的个数不等于输出神经元的个数,那数目不等的输入输出神经元怎么连接起来呢?还有,这个滤波器(卷积核)是什么样呢?可以看看下面例子:
其中(X1,X2,X3)就是输入神经元(特征图),而(Y1Y2)就是输出神经元(特征图),两层之间的连接就是卷积核:,想想矩阵相乘,就明白1X3的“矩阵”怎么变成1X2的矩阵了。
总的下来就是:,
这个卷积核的形状是在代码中自动计算出来的。