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

使用Keras预训练VGG16模型时出现形状不兼容错误

解决Keras VGG16三分类任务中形状不兼容的报错问题

问题场景

在自定义三分类图像任务中使用Keras的VGG16模型,基于《Python深度学习》第8章示例代码开发,数据目录结构如下:

data/
  training/
    class_1
    class_2
    class_3

调用model.fit()时触发报错:

ValueError: Shapes (32, 1) and (32, 3) are incompatible

报错原因

模型输出层为layers.Dense(3, activation="softmax"),输出形状为(batch_size, 3)(对应3类的概率分布);但你的标签数据train_labels和val_labels是整数形式的稀疏标签(形状为(样本数,)),而当前使用的损失函数categorical_crossentropy要求标签是one-hot编码格式(形状为(样本数, 类别数)),两者形状不匹配导致报错。

解决方案

提供两种可行方案,任选其一即可:

方案一:修改损失函数(推荐)

将损失函数改为sparse_categorical_crossentropy,该损失专门适配整数形式的稀疏标签,无需修改现有标签数据:

model.compile(loss="sparse_categorical_crossentropy",
              optimizer="rmsprop",
              metrics=["accuracy"])

方案二:将标签转换为one-hot编码

保持categorical_crossentropy损失,将整数标签转换为one-hot编码格式:

import numpy as np

# 对训练和验证标签进行one-hot编码
train_labels = tf.keras.utils.to_categorical(train_labels, num_classes=3)
val_labels = tf.keras.utils.to_categorical(val_labels, num_classes=3)

转换后标签形状变为(128400, 3)和(15600, 3),与模型输出形状匹配。

补充说明

image_dataset_from_directory默认返回整数形式的标签(参数sparse=True为默认值),因此方案一更为简便,无需额外数据处理步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:15:34