TensorFlow使用sklearn鸢尾花数据集训练时维度不匹配报错ValueError
问题根因
错误与sklearn导入的鸢尾花数据集格式无关,你的网络结构、损失函数SparseCategoricalCrossentropy的选择已经适配sklearn输出的整数格式标签,问题出在Precision指标的默认配置仅适配二分类场景,无法匹配多分类任务的输出维度。
你当前是3分类任务,模型输出维度为(None, 3),而默认配置的Precision指标期望接收二分类的(None, 1)维度输出,因此触发维度不兼容报错。
解决方案
有两种可行修改方式,按需选择即可:
- 方案1:不需要统计Precision指标,直接移除编译参数中的precision项
修改后的compile代码如下:model_1.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(), optimizer=tf.keras.optimizers.Adam(), metrics=["accuracy"]) - 方案2:需要保留Precision指标,初始化时指定多分类配置
首先在创建Precision指标时指定分类数和平均规则,再传入compile参数:# 初始化多分类Precision,average可选值为macro/micro/weighted,可根据评估需求调整 multi_precision = tf.keras.metrics.Precision(num_classes=3, average='macro', name='precision') # 编译模型 model_1.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(), optimizer=tf.keras.optimizers.Adam(), metrics=["accuracy", multi_precision])
两种方案修改后都可以正常适配sklearn导入的鸢尾花数据集完成训练。
内容的提问来源于stack exchange,提问作者JLuu
相关产品推荐
相关产品推荐

