HuggingFace微调预训练模型时出现NoneType与int无法比较TypeError如何解决
错误产生原因
该错误是HuggingFace TensorFlow训练流程中计算总训练步数时触发的类型错误,核心诱因有两类:
TFTrainer已在新版🤗 Transformers库中被正式废弃,旧API的参数兼容逻辑缺失,内部计算训练步数时会返回空值- 你定义的
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
相关产品推荐
相关产品推荐

