You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自编码器训练报错:logits与labels形状不匹配求助

Keras自编码器形状不匹配问题修复

问题原因

报错的核心是解码器中某一层卷积未设置填充,导致特征图尺寸逐步缩小,最终输出形状与输入不一致:

  • 解码器中x = layers.Conv2D(16, 3, activation='relu')(x)这行代码默认使用padding='valid'(无填充),此时特征图尺寸从64x64变为62x62(计算方式:64 - 3 + 1 = 62)。
  • 后续经过UpSampling2D(2)后,尺寸变为124x124,最终输出形状为(64,124,124,3),与输入的(64,128,128,3)不匹配,触发ValueError。

修复步骤

给上述缺失填充的卷积层添加padding='same',确保每一步卷积后特征图尺寸保持不变,最终输出与输入形状一致。

修复后的解码器代码

# Define the decoder
decoder_input = encoder_output
x = layers.Conv2D(8, 3, activation='relu', padding='same')(decoder_input)
x = layers.UpSampling2D(2)(x)
x = layers.Conv2D(8, 3, activation='relu', padding='same')(x)
x = layers.UpSampling2D(2)(x)
# 添加padding='same',保证尺寸不缩小
x = layers.Conv2D(16, 3, activation='relu', padding='same')(x)
x = layers.UpSampling2D(2)(x)
decoder_output = layers.Conv2D(3, 3, activation='sigmoid', padding='same')(x)

验证修复效果

修复后,解码器各层输出尺寸变化如下:

  1. 编码器输出:(None,16,16,8)
  2. Conv2D(8,3,same) + UpSampling2D(2) → (None,32,32,8)
  3. Conv2D(8,3,same) + UpSampling2D(2) → (None,64,64,8)
  4. Conv2D(16,3,same) + UpSampling2D(2) → (None,128,128,16)
  5. 最终Conv2D(3,3,same) → (None,128,128,3),与输入形状完全匹配。

内容的提问来源于stack exchange,提问作者Davin Vroegop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:55:18