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

运行图像分割模型时出现Logits与Labels形状不匹配错误求助

问题:语义分割训练时logits与labels形状不匹配错误

运行代码

model = sm.Unet('resnet50', encoder_weights='imagenet', classes=n_classes, activation=activation)
model.compile(optimizer=Adam(learning_rate = 1e-3), loss='binary_crossentropy', metrics=['accuracy'])
model.summary()

history = model.fit(X_test, y_test, 
                    batch_size = 1, 
                    verbose=1, 
                    epochs=5, 
                    validation_data=(y_test, y_test), 
                    shuffle=True)

报错信息

ValueError: `logits` and `labels` must have the same shape, received ((1, 64, 64, 4) vs (1, 64, 64, 1)).

已知数据形状

  • X_train:(113, 64, 64, 3)
  • y_train:(133, 64, 64, 1)

问题分析与解决方案

1. 模型输出通道与标签通道不匹配

错误提示显示模型输出为(1,64,64,4),但标签是(1,64,64,1),说明你设置的n_classes=4,但实际标签是单通道的二分类格式(仅包含0/1两类):

  • 若为二分类语义分割,将n_classes改为1,同时激活函数设为sigmoid(与binary_crossentropy损失匹配)。
  • 若为4分类任务,需将标签转换为4通道的one-hot编码格式,同时损失函数改用categorical_crossentropy。

2. 验证集参数设置错误

validation_data的格式应为(验证集输入数据, 验证集标签),你写成(y_test, y_test)会把标签当作模型输入(输入需要3通道,标签仅1通道,形状不匹配),应改为(X_val, y_val)(替换为你的验证集输入和标签)。

3. 训练数据集样本数量不一致

X_train样本数为113,y_train为133,两者数量不匹配,训练时会触发维度错误。需检查数据加载或预处理流程,确保训练集输入与标签的样本数完全一致。


修正后的示例代码

# 假设是二分类任务
n_classes = 1
activation = 'sigmoid'

model = sm.Unet('resnet50', encoder_weights='imagenet', classes=n_classes, activation=activation)
model.compile(optimizer=Adam(learning_rate=1e-3), loss='binary_crossentropy', metrics=['accuracy'])
model.summary()

# 确保X_train和y_train样本数一致,使用训练集训练,验证集传入正确的输入和标签
history = model.fit(X_train, y_train, 
                    batch_size=1, 
                    verbose=1, 
                    epochs=5, 
                    validation_data=(X_val, y_val), 
                    shuffle=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:03:16