如何计算卷积神经网络的最佳零填充?

机器算法验证 机器学习 神经网络 深度学习 卷积神经网络 计算机视觉
2022-03-09 04:21:10

所以根据cs231n博客计算零填充数的公式是:

P = (F-1)/2

其中P是 的数量zero padding,Ffilter size和 的数量stride1但是我不明白如果步数不是 1 或者 F 是偶数会发生什么。让我们考虑步幅数为 4 且 F 为 7 或步幅为 1 且 F 为 4。因此根据公式,在这两种情况下,零填充都是分数:

1) P = (7-4)/2 = 3/2
2) P = (4-1)/2 = 3/2

零填充的数量怎么可能是分数?

4个回答

填充大小的可能值,P, 取决于输入大小W(遵循博客的符号),过滤器大小F和步伐S. 我们假设宽度和高度是相同的。

您需要确保的是输出大小,(WF+2P)/S+1, 是一个整数。什么时候S=1然后你得到你的第一个方程P=(F1)/2作为必要条件。但是,一般来说,您需要考虑三个参数,即W,FS为了确定的有效值P.

实现 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 * (horizo​​ntal_stride -1) - Horizo​​ntal_stride + Horizo​​ntal_dilation * (rows_in_kernel - 1) + 1

left pad = Horizo​​ntal total_paddint // 2
right pad = total_padding - left pad

同样,您可以找到垂直填充。