ResNet-50迁移学习训练报错:维度不匹配问题求助
问题解决:ResNet-50微调时维度不匹配错误
错误原因
你的错误源于评估指标与损失函数不匹配:
- 你使用的
SparseCategoricalCrossentropy损失函数,针对的是整数型标签(形状为[batch_size],比如你的标签是(32,)),它会自动将整数标签与模型输出的[batch_size, n_classes]形状的softmax结果计算损失。 - 但你在metrics里用了
tf.keras.metrics.Accuracy,这个指标默认要求预测值和标签的维度完全一致:它会直接比较[32,27]的预测输出和[32]的标签,自然会出现维度不匹配的错误。
解决方案
将metrics中的Accuracy替换为SparseCategoricalAccuracy,这个指标专门适配整数标签与多分类输出的匹配场景:
修改后的模型编译代码:
base_learning_rate = 0.001 model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=base_learning_rate), loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=[tf.keras.metrics.SparseCategoricalAccuracy(name='accuracy')])
额外检查点
- 确认
n_classes的值是否等于数据集的实际类别数(错误信息中模型输出是[32,27],说明你设置的n_classes=27,请确保这与WikiArt数据集的风格类别数量一致)。 - 数据集的标签确实是整数类型(从你的
element_spec看标签是tf.int64,符合SparseCategoricalCrossentropy的要求,这部分没问题)。
内容的提问来源于stack exchange,提问作者Bernardino Sassoli de' Bianchi
相关产品推荐
相关产品推荐

