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

TensorFlow1.5.0二分类任务中mean_per_class_accuracy报形状不兼容错误求助

解决TensorFlow 1.5.0中tf.metrics.mean_per_class_accuracy()的形状不兼容问题

这个错误ValueError: Shapes (?,) and (?, 1) are incompatible本质是输入的真实标签(y_true)和预测结果(y_pred)形状不匹配——tf.metrics.accuracy()内部做了自动形状兼容处理,但mean_per_class_accuracy()在TF1.5版本里对输入形状要求更严格,必须保证两者维度完全一致。

具体解决步骤:

  1. 先确认输入形状
    先打印出y_true和y_pred的形状,明确哪一个是二维的((?,1)),哪一个是一维的((?,)):

    print("y_true shape:", tf.shape(y_true))
    print("y_pred shape:", tf.shape(y_pred))
    
  2. 统一输入形状与数据类型
    用tf.squeeze()把二维的张量压缩成一维(去除最后一个维度为1的轴),同时注意:mean_per_class_accuracy()要求输入是类别索引(整数),不是概率分布或one-hot编码。如果你的y_pred是模型输出的概率(比如形状为(?,2)),需要先通过tf.argmax()转成类别索引。

    示例修正后的代码:

    # 处理真实标签:如果是(?,1)就压缩成(?,)
    y_true_squeezed = tf.squeeze(y_true, axis=-1)
    # 处理预测结果:如果是概率分布,转成类别索引(形状变为(?,))
    y_pred_classes = tf.argmax(y_pred, axis=-1)
    
    eval_metric_ops = {
        "accuracy": tf.metrics.accuracy(y_true, y_pred),
        "mean_per_class_accuracy": tf.metrics.mean_per_class_accuracy(
            labels=y_true_squeezed,
            predictions=y_pred_classes,
            num_classes=2  # 二分类任务,这里填2
        )
    }
    
  3. 验证逻辑
    修正后再运行,形状不匹配的问题应该就能解决。本质上是TF1.5的这个metric函数没有自动处理形状差异,需要我们手动对齐输入维度和数据类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:15:00