运行Hugging Face微调示例时出现TensorFlow NoneType与int比较TypeError
错误成因
该错误和batch size的修改没有直接关联,核心原因是eval_steps参数未被正确赋值,触发了参数校验逻辑的类型异常。
当你在TrainingArguments配置中设置了evaluation_strategy = "steps"时,框架要求必须配套指定eval_steps参数,用来定义每间隔多少训练步执行一次验证。如果没有主动配置该参数,它的默认值为None,代码执行到self.args.eval_steps > 0的校验逻辑时,就会出现空类型和整数无法比较的报错。
还有两种少见的触发场景:
- 你显式将
eval_steps设置为了None - 开启了
do_eval参数,但没有配套设置正确的评估策略和对应参数
解决方法
根据你的使用场景任选一种方案即可:
- 如果你不需要按步数触发验证,可以将
evaluation_strategy修改为"epoch",此时每训练完一个完整epoch才会执行验证,不需要配置eval_steps参数,配置示例如下:
training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=1, per_device_eval_batch_size=1, evaluation_strategy="epoch", learning_rate=2e-5, num_train_epochs=3, )
- 如果你需要按步数触发验证,保留
evaluation_strategy = "steps"的同时,给eval_steps赋一个正整数值即可,比如设置为每100步验证一次,配置示例如下:
training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=1, per_device_eval_batch_size=1, evaluation_strategy="steps", eval_steps=100, learning_rate=2e-5, num_train_epochs=3, )
- 如果你完全不需要执行验证流程,直接将
do_eval设置为False即可,框架会自动跳过所有验证相关的逻辑校验。
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

