Caffe Layers

来源:互联网 发布:2017淘宝开店成功经验 编辑:程序博客网 时间:2024/05/22 14:18

Convolution

https://medium.com/towards-data-science/types-of-convolutions-in-deep-learning-717013397f4d

for (1:n)   im2col 之后做一次矩阵乘法   (m, k) x (k, n) 

m = num_output ( num of kernel)
k = c * h * w (of input)
n = computed from input, using kernel[2], pad[2], stride[2] and dilation[2]

Crop

裁剪层
proto参数:
axis,代表从第axis轴开始裁剪,前面的维度保持不变。默认为2,表示裁图的大小。
offset,从哪里开始裁。
input参数:一个blob是待裁的blob,一个blob是要裁成什么形状

比如:
axis = 2; offset = 12; offset = 12;
input[0].shape = {1, 3, 36, 36}; input[1].shape = {1, 3, 14, 14};
output[0] will be data[0][0..3][12..25][12..25] of input[0]

InnerProduct

全连接层。将一张图中的所有值与对应某个标签的权重相乘并求和,得到一个值,为该标签的得分。
假设输入为(n,c,h,w)
训练好的参数为 (c*h*w, num)的矩阵,num为标签数
for(:n)
做(1, c*h*w) x (c*h*w, num)的矩阵乘法,得到该图对应每个标签的得分。
注:这里的权重大小由input大小计算得出,一个由image_size = 16x16训练出的全连接层并不能适用于其他size

Softmax

将得分转化成概率
pi = e^xi / sigma(e^xj)
一般来说这里的输入只有2个维度,即(n,c),表示第n个图对应c个标签的得分。转化之后为对于c个标签的概率,转化之后概率和为1 。
Caffe中的实现比较奇怪,是考虑了 h和w维度的情况。当这2个维度存在的时候,公式里变量j仍然是在[0, c)这个区间而不是[0, h*w)。相当于最后会得到h*w组 概率合为1的概率向量(并且是离散排列的)。