所以根据cs231n博客计算零填充数的公式是:
P = (F-1)/2
其中P是 的数量zero padding,F是filter size和 的数量stride是1。但是我不明白如果步数不是 1 或者 F 是偶数会发生什么。让我们考虑步幅数为 4 且 F 为 7 或步幅为 1 且 F 为 4。因此根据公式,在这两种情况下,零填充都是分数:
1) P = (7-4)/2 = 3/2
2) P = (4-1)/2 = 3/2
零填充的数量怎么可能是分数?
所以根据cs231n博客计算零填充数的公式是:
P = (F-1)/2
其中P是 的数量zero padding,F是filter size和 的数量stride是1。但是我不明白如果步数不是 1 或者 F 是偶数会发生什么。让我们考虑步幅数为 4 且 F 为 7 或步幅为 1 且 F 为 4。因此根据公式,在这两种情况下,零填充都是分数:
1) P = (7-4)/2 = 3/2
2) P = (4-1)/2 = 3/2
零填充的数量怎么可能是分数?
填充大小的可能值,, 取决于输入大小(遵循博客的符号),过滤器大小和步伐. 我们假设宽度和高度是相同的。
您需要确保的是输出大小,, 是一个整数。什么时候然后你得到你的第一个方程作为必要条件。但是,一般来说,您需要考虑三个参数,即,和为了确定的有效值.
实现 SAME padding 所需的 padding P的通用公式如下:
P = ((S-1)*W-S+F)/2, with F = filter size, S = stride, W = input size
当然,填充 P 不能是分数,因此您应该将其四舍五入到下一个更高的 int 值。
在某些情况下(input_dim + 2*padding_side - filter) % stride == 0,padding_side 没有解决方案。
该公式(filter - 1) // 2对于输出形状为 的公式来说已经足够好了(input_dim + 2*padding_side - filter) // stride + 1。输出图像不会保留填充图像中的所有信息,但没关系,因为我们只从填充中截断。
要查找任何内核大小的填充大小:
水平总填充 = (#rows_in_image * (horizontal_stride -1) - Horizontal_stride + Horizontal_dilation * (rows_in_kernel - 1) + 1
left pad = Horizontal total_paddint // 2
right pad = total_padding - left pad
同样,您可以找到垂直填充。