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

TFRobertaForSequenceClassification二分类报predictions must <=1错误如何解决

错误原因

Hugging Face的TFRobertaForSequenceClassification在num_labels=1的二分类场景下,默认输出的是未经过sigmoid激活的原始logits值,数值范围为(-∞, +∞),并非0-1区间的概率值。你遇到的报错来自两个配置不匹配:

  • 损失函数设置from_logits=False,要求输入的预测值为0-1区间的概率,和模型输出的原始logits不匹配
  • Keras自带的TruePositives、TrueNegatives等分类指标,默认要求输入的预测值在0-1区间,原始logits可能出现大于1或小于0的数值,触发了指标内部的断言校验。你报错日志里只打印了部分样本的预测值,实际该批次中存在超出0-1范围的样本。

解决方法

有两种可直接落地的修改方案:

方案1:适配原始logits输出修改参数

保留模型默认输出原始logits的逻辑,仅修改损失和指标的参数即可:

from transformers import TFRobertaForSequenceClassification
import tensorflow as tf

model = TFRobertaForSequenceClassification.from_pretrained('roberta-base', num_labels=1)

optimizer = tf.keras.optimizers.Adam(learning_rate=5e-5)
model.compile(
    optimizer=optimizer, 
    # 开启from_logits,告知损失函数输入为原始logits
    loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
    metrics = [
      'accuracy',
      # 给所有混淆矩阵指标添加from_logits=True参数,TensorFlow 2.11及以上版本原生支持
      tf.keras.metrics.TruePositives(from_logits=True),
      tf.keras.metrics.TrueNegatives(from_logits=True),
      tf.keras.metrics.FalseNegatives(from_logits=True),
      tf.keras.metrics.FalsePositives(from_logits=True)
    ])
history = model.fit(train_dataset.shuffle(1000).batch(16), epochs=10, batch_size=16, validation_data = test_dataset.batch(1))

方案2:让模型直接输出0-1概率

在初始化模型时指定激活函数,让模型输出层直接经过sigmoid激活得到概率值,无需修改原有损失和指标的基础配置:

from transformers import TFRobertaForSequenceClassification
import tensorflow as tf

# 新增classifier_activation参数指定分类头用sigmoid激活
model = TFRobertaForSequenceClassification.from_pretrained('roberta-base', num_labels=1, classifier_activation='sigmoid')

optimizer = tf.keras.optimizers.Adam(learning_rate=5e-5)
model.compile(
    optimizer=optimizer, 
    loss=tf.keras.losses.BinaryCrossentropy(from_logits=False),
    metrics = [
      'accuracy',
      tf.keras.metrics.TruePositives(),
      tf.keras.metrics.TrueNegatives(),
      tf.keras.metrics.FalseNegatives(),
      tf.keras.metrics.FalsePositives()
    ])
history = model.fit(train_dataset.shuffle(1000).batch(16), epochs=10, batch_size=16, validation_data = test_dataset.batch(1))

内容的提问来源于stack exchange,提问作者Elliott de Launay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:15:04