构建32x32x3 RGB图像CNN及输出32x32图像解码器的形状错误求助
问题一:MaxPooling2D 维度不匹配错误
错误原因
代码中Conv2D层末尾多了一个逗号:
Z = tf.keras.layers.Conv2D(16, 3, padding="same", activation="relu")(inputs),
这个逗号会让Z变成包含单个张量的元组,而非正常的4维张量(NHWC格式:批次、高度、宽度、通道)。MaxPool2D层仅接收4维张量,元组传入后会被解析为5维结构,从而触发维度不匹配报错。
修正代码
删除多余的逗号即可:
inputs = tf.keras.layers.Input(shape=(32, 32, 3)) Z = tf.keras.layers.Conv2D(16, 3, padding="same", activation="relu")(inputs) Z = tf.keras.layers.MaxPool2D(pool_size=(2,2))(Z)
问题二:解码器Reshape尺寸不匹配错误
错误原因
当前网络最后一层Conv2DTranspose输出张量的尺寸为(None, 28, 28, 1),总元素数为28*28*1=784;但你试图将其Reshape为[32,32](总元素数32*32=1024),两者元素总数不一致,因此触发报错。
修正方案
调整网络结构,让最后一层Conv2DTranspose输出尺寸为32x32x1,再进行Reshape。以下是可行的修正代码:
codings_size=10 decoder_inputs = tf.keras.layers.Input(shape=[codings_size]) # 初始全连接层输出适配后续转置卷积的尺寸 x=tf.keras.layers.Dense(8 * 8 * 16)(decoder_inputs) x=tf.keras.layers.Reshape((8, 8, 16))(x) # 第一次转置卷积:8x8 → 16x16 x=tf.keras.layers.Conv2DTranspose(32, 3, strides=2, padding="same", activation="relu")(x) # 第二次转置卷积:16x16 →32x32 x=tf.keras.layers.Conv2DTranspose(1, 3, strides=2, padding="same")(x) # 此时输出为(None,32,32,1),Reshape为32x32 outputs=tf.keras.layers.Reshape([32, 32])(x) variational_decoder = tf.keras.Model(inputs=[decoder_inputs], outputs=[outputs])
内容的提问来源于stack exchange,提问作者Linh Chi Nguyen
相关产品推荐
相关产品推荐

