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

SegNet运行遇custom_layers缺失及MaxUnpooling2D维度不匹配报错求助

问题解决方法

错误1:ModuleNotFoundError: No module named 'custom_layers' 解决

  • 方案1:直接把MaxPoolingWithArgmax2D和MaxUnpooling2D两个自定义层的代码复制到训练主脚本的开头,不需要单独存放在custom_layers目录,即可直接调用,无需额外导入。
  • 方案2:保留目录结构的话按以下操作:
    1. 在C:\spyder\codes\custom_layers目录下新建空文件__init__.py
    2. 在主脚本开头添加代码:
    import sys
    sys.path.append("C:/spyder/codes")
    from custom_layers.layers import MaxPoolingWithArgmax2D, MaxUnpooling2D
    

错误2:InvalidArgumentError 维度不匹配解决

报错根本原因是解码器卷积层输出通道数和对应mask的通道数不匹配,导致scatter_nd的indices和updates元素总数差1倍,和你报错的数值完全吻合,按以下步骤修改即可:

  1. 修正解码器各层通道数,和对应mask的通道数对齐:
    • conv_5的卷积核数从8*num_filters改为4*num_filters,匹配mask3的256通道
    • conv_6的卷积核数从4*num_filters改为2*num_filters,匹配mask2的128通道
    • conv_7的卷积核数从2*num_filters改为1*num_filters,匹配mask1的64通道
  2. 修正MaxUnpooling2D层的动态形状计算逻辑,避免静态形状导致的隐式错误,替换call方法中的reshape部分代码:
    # 删掉原来用静态形状updates.shape计算的逻辑
    out_shape = [
        input_shape[0],
        input_shape[1] * self.size[0],
        input_shape[2] * self.size[1],
        input_shape[3]
    ]
    
  3. 删掉输出部分重复的3次卷积+激活逻辑,只保留1次输出层即可;你之前定义的归一化Lambda层没有被使用,要么删掉要么把conv1的输入改为归一化后的张量。
  4. 可选优化:MaxPoolingWithArgmax2D中返回的argmax不需要转成float,直接返回int类型即可,避免来回类型转换的精度损失。

修改完成后重新运行代码即可解决所有报错。


内容的提问来源于stack exchange,提问作者Nagaraj Rajendiran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:18:03