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

HuggingFace微调预训练模型时出现NoneType与int无法比较TypeError如何解决

错误产生原因

该错误是HuggingFace TensorFlow训练流程中计算总训练步数时触发的类型错误,核心诱因有两类:

  1. TFTrainer 已在新版🤗 Transformers库中被正式废弃,旧API的参数兼容逻辑缺失,内部计算训练步数时会返回空值
  2. 你定义的training_args训练参数缺失必填配置,最常见的是未显式设置num_train_epochs、per_device_train_batch_size,或是训练数据集未正确配置长度属性,框架无法自动计算总训练步数,拿到的None值后续参与大小比较就触发了该报错。
解决方案
  • 方案1:补全训练参数必填项
    显式在TFTrainingArguments中指定所有核心训练配置,不要依赖默认空值,示例配置如下:
    from transformers import TFTrainingArguments
    
    training_args = TFTrainingArguments(
        output_dir="./output",
        per_device_train_batch_size=8,
        per_device_eval_batch_size=8,
        num_train_epochs=3, # 必须显式赋值,不可留空
        evaluation_strategy="epoch",
        logging_dir="./logs"
    )
    
  • 方案2:改用官方推荐的原生Keras训练流程
    废弃已停止维护的TFTrainer,直接用Keras接口训练,适配性和灵活性更强,示例代码如下:
    import tensorflow as tf
    from transformers import TFDistilBertForSequenceClassification
    
    model = TFDistilBertForSequenceClassification.from_pretrained("distilbert-base-uncased")
    # 编译模型
    model.compile(
        optimizer=tf.keras.optimizers.Adam(learning_rate=5e-5),
        loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
        metrics=[tf.keras.metrics.SparseCategoricalAccuracy()]
    )
    # 启动训练
    model.fit(
        train_dataset.batch(8),
        validation_data=test_dataset.batch(8),
        epochs=3
    )
    
  • 方案3:降级🤗 Transformers版本匹配旧教程
    如果你需要完全沿用原教程的TFTrainer代码逻辑,可将库版本降级到4.10及以下的长期支持版本:
    pip install transformers==4.10.0
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:06:04