Tensorflow在模式’valid’下的卷积输出大小
假定 W \text{W} W为图片的输入尺寸, K \text{K} K为卷积核的大小, S \text{S} S为stride的大小。
在’valid’模式下(没有padding),卷积输出的feature map常见计算公式为
⌊ W − K S ⌋ + 1 \lfloor \frac{\text{W}-\text{K}}{\text{S}} \rfloor + 1 ⌊SW−K⌋+1
其中, ⌊ ⋅ ⌋ \lfloor \cdot \rfloor ⌊⋅⌋表示向下取整,如 ⌊ 3.4 ⌋ = 3 \lfloor 3.4 \rfloor = 3 ⌊3.4⌋=3。
而tensorflow官网的计算公式却是
⌈ W − K + 1 S ⌉ \lceil \frac{\text{W}-\text{K}+1}{\text{S}} \rceil ⌈SW−K+1⌉
其中, ⌈ ⋅ ⌉ \lceil \cdot \rceil ⌈⋅⌉表示向下取整,如 ⌈ 3.4 ⌉ = 4 \lceil 3.4 \rceil = 4 ⌈3.4⌉=4。
这两个计算公式哪个是对的呢?
其实都是对的,因为它们是等价的,下面来证明:
令 X = W − K \text{X}=\text{W}-\text{K} X=W−K,然后分三种情况讨论:
-
若 X S \frac{\text{X}}{\text{S}} SX为整数,显然有
⌊ X S ⌋ + 1 = X S + 1 ⌈ X + 1 S ⌉ = ⌈ X S + 1 S ⌉ = X S + ⌈ 1 S ⌉ = X S + 1 ⟹ ⌊ X S ⌋ + 1 = ⌈ X + 1 S ⌉ \begin{aligned} \lfloor \frac{\text{X}}{\text{S}} \rfloor +1&=\frac{\text{X}}{\text{S}} +1 \\ \lceil \frac{\text{X}+1}{\text{S}} \rceil &= \lceil \frac{\text{X}}{\text{S}} + \frac{1}{\text{S}} \rceil = \frac{\text{X}}{\text{S}} + \lceil \frac{1}{\text{S}} \rceil=\frac{\text{X}}{\text{S}} + 1 \end{aligned} \Longrightarrow \lfloor \frac{\text{X}}{\text{S}} \rfloor +1=\lceil \frac{\text{X}+1}{\text{S}} \rceil ⌊SX⌋+1⌈SX+1⌉=SX+1=⌈SX+S1⌉=SX+⌈S1⌉=SX+1⟹⌊S