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

U-Net模型运行时出现通道不匹配RuntimeError问题求助

U-Net通道不匹配问题排查与修复

错误根源

报错信息显示输入通道为1536,但卷积层期望1024通道,核心问题是拼接后的卷积层输入通道数未匹配拼接后的总通道数:

  • 解码器第一个阶段:上采样后的特征是1024通道,和编码器输出的x4(512通道)拼接后总通道数为1024+512=1536,但你定义的conv11输入通道是1024,完全不匹配,直接触发报错。
  • 后续其他拼接阶段也存在同样的通道数不匹配问题。

具体修复步骤

修改模型__init__中的卷积层输入通道,确保和拼接后的总通道一致:

1. 修正conv11的输入通道

原代码:

self.conv11 = torch.nn.Conv2d(1024, 512, kernel_size=3, padding='same')

修改为:

self.conv11 = torch.nn.Conv2d(1536, 512, kernel_size=3, padding='same')

(1536 = 上采样后的1024通道 + x4的512通道)

2. 修正conv14的输入通道

原代码:

self.conv14 = torch.nn.Conv2d(512, 256, kernel_size=3, padding='same')

修改为:

self.conv14 = torch.nn.Conv2d(768, 256, kernel_size=3, padding='same')

(768 = 上采样后的512通道 + x3的256通道)

3. 修正conv16的输入通道

原代码:

self.conv16 = torch.nn.Conv2d(256, 128, kernel_size=3, padding='same')

修改为:

self.conv16 = torch.nn.Conv2d(384, 128, kernel_size=3, padding='same')

(384 = 上采样后的256通道 + x2的128通道)

4. 修正conv19的输入通道

原代码:

self.conv19 = torch.nn.Conv2d(128, 64, kernel_size=3, padding='same')

修改为:

self.conv19 = torch.nn.Conv2d(192, 64, kernel_size=3, padding='same')

(192 = 上采样后的128通道 + x1的64通道)

额外优化点

你重复定义了多次self.Upsample,后面的定义会覆盖前面的实例,虽然Upsample是无参数层不影响功能,但建议只定义一次:

self.upsample = torch.nn.Upsample(scale_factor=2)

然后在forward中统一使用self.upsample(x)即可。

验证修改

修改完成后,可通过以下代码快速验证模型输入输出是否匹配:

import torch
model = UNet()
test_input = torch.randn(1, 1, 128, 128)  # 批量1,单通道,128x128输入
output = model(test_input)
print(f"输入形状: {test_input.shape}, 输出形状: {output.shape}")

正常情况下输出形状应为(1,1,128,128),和输入尺寸一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:22:05