keras中conv2d的padding能填什么
时间: 2023-08-07 12:17:04 浏览: 52
在Keras中,`Conv2D`的`padding`参数可以填写以下两个值之一:
- `'valid'`:表示不填充,仅对每个位置的输入进行卷积计算。因此,输出的大小会比输入小,大小减少了卷积核的大小减去1。如果输入的形状为`(batch_size, height, width, channels)`,卷积核的形状为`(kernel_height, kernel_width, input_channels, output_channels)`,则输出的形状将是`(batch_size, new_height, new_width, output_channels)`,其中`new_height = height - kernel_height + 1`,`new_width = width - kernel_width + 1`。
- `'same'`:表示在输入的周围填充足够的0,使得卷积后的输出大小与输入大小相同。如果输入的形状为`(batch_size, height, width, channels)`,卷积核的形状为`(kernel_height, kernel_width, input_channels, output_channels)`,则填充的大小为:
```
pad_along_height = max((height - 1) * stride[0] + kernel_height - height, 0)
pad_along_width = max((width - 1) * stride[1] + kernel_width - width, 0)
total_vertical_padding = pad_along_height // 2
total_horizontal_padding = pad_along_width // 2
```
其中,`stride`表示卷积步长。使用`'same'`填充时,填充的大小可能是奇数或偶数。如果是奇数,则在右侧或下侧填充一个额外的0,以便填充后的大小与输入大小相同。填充后的输入形状为`(batch_size, height + total_vertical_padding * 2, width + total_horizontal_padding * 2, channels)`,卷积后的输出形状与输入相同,即为`(batch_size, height, width, output_channels)`。
除了`'valid'`和`'same'`之外,还可以自定义填充方式,这需要使用`ZeroPadding2D`层来实现自定义填充。