我正在处理不同尺寸(x,y)的图像。当在MaxPooling2D
之后使用UpSampling2D
时,由于x维度不等于y维度,图像重建效果不佳。当x=y时(例如28×28),它能正常工作,但在我的情况中(388×45)。我该如何解决这个问题?
input_img = Input(shape=(388, 45, 1)) x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)x = MaxPooling2D((2, 2), padding='same')(x)x = UpSampling2D((2, 2))(x)x = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
回答:
解决这个问题的方法是在上采样层之后添加ZeroPadding2D
,以达到所需的形状。
实际上,如果您的图像形状为((19,30)),为了得到一个偶数,例如在第一个位置,您可以添加:
x = UpSampling2D((2, 2))(x) #假设上采样后的形状为(19,30),但您需要(20,30)x = ZeroPadding2D(((1, 0), (0, 0)))(x) #如果您想让第二个维度增加1,则更改为ZeroPadding2D(((0, 0), (0, 1)))
您可以在以下回答中找到ZeroPadding2D
的完美使用示例:segnet in keras: total size of new array must be unchanged error