如何调整Keras ZeroPadding2D参数使输出形状为[1,1,104,24]
解决ZeroPadding2D填充后形状不符的问题
问题原因
输入张量的维度遵循TensorFlow默认格式 (batch, H, W, channels),其中第三维度(W维度)初始长度为1。你使用的padding=(0,51)表示:
- H维度上下各填充0个0
- W维度左右各填充51个0
最终W维度长度为1 + 51*2 = 103,这就是输出形状为[1,1,103,24]的原因。
解决方案
要让W维度最终变为104,需要的总填充量是 104 - 1 = 103。由于103是奇数,无法对称分配到左右两侧,因此使用非对称填充的参数格式:指定W维度左侧填充51个0,右侧填充52个0,总填充量为51+52=103,加上原长度1正好得到104。
修正后的代码如下:
import tensorflow as tf import numpy as np # 修正原代码中的dumpy拼写错误 input_shape = (1, 1, 1, 24) x = np.arange(np.prod(input_shape)).reshape(input_shape) # (1, 1, 1, 24) y = tf.keras.layers.ZeroPadding2D(padding=((0, 0), (51, 52)))(x) print(y.shape) # 输出 TensorShape([1, 1, 104, 24])
补充说明
ZeroPadding2D的padding参数支持三种写法:
- 整数
n:所有维度的两侧都填充n个0 - 二元组
(n,m):H维度两侧填充n个0,W维度两侧填充m个0 - 嵌套二元组
((top, bottom), (left, right)):分别指定H维度上下、W维度左右的填充数,适用于非对称填充场景
内容的提问来源于stack exchange,提问作者kuku
相关产品推荐
相关产品推荐

