参考论文:A guide to convolution arithmetic for deep learning 论文地址:arxiv.org/abs/1603.07… 等效卷积核大小计算:K=k+(k−1)∗(r−1) (k为原大小,K为等效大小, r 为 dilation) -> 无空洞时dilation为1
注意: floor(x-1)//2 + 1 == x//2 <- 当且仅当 x为偶数! 这种padding出现在ResNet中的downsample中
1. Convolution arithmetic
核心公式:(根据这个公式,各种卷积的output size的计算其实都是一类
i:input size o:output size p:padding size k:kernel size
1. No zero padding, unit strides
2. Zero padding, unit strides
3. Half(same) padding, [unit strides - same padding必须要s=1, o = i]
要求:k=2n+1, p = floor(k/2) =n
4. Full padding [o = i + p]
5. No zero padding , non-unit strides
6. Zero padding, non-unit strides
2. Pooling arithmetic
3. Transposed convolution arithmetic
这里相对较难,需要不断重复
试想,将输出展平作为列,输入展平作为行,矩阵的每个元素就是输入元素计算卷积时所使用的权重,这样一来便可以计算逆。
然后将输入矩阵展平为列向量X,将此权重矩阵与X做矩阵乘法,得到一个4维的列向量,随后resize为(2,2)的矩阵,即输出矩阵。
1. No zero padding, unit strides, transposed(与前面进行对比)
2. Zero padding, unit strides, transposed
3. Half(same) padding, transposed
假定k=2n+1(即为奇数),p=floor(k/2) = n
4. Full padding, transposed
p = k-1
5. No zero padding, non-unit strides, transposed
假设o'-k能整除s
6. Zero padding, non-unit strides, transposed
假设o'+2p-k能整除s