Hugging Face微调BERT时EagerTensor无to_tensor属性报错求助
问题根因
这个报错和TensorFlow版本无关,是Hugging Face datasets 库版本迭代导致的接口变化:
- 旧版本
datasets库中,数据集调用.with_format('tensorflow')后,按字段取到的是DatasetTensor类型对象,需调用.to_tensor()方法转为规整的EagerTensor - 新版本
datasets库优化了接口,调用.with_format('tensorflow')后直接返回EagerTensor,不再提供to_tensor()方法
你本地M1环境和Colab环境的datasets库版本不一致,才会出现相同TensorFlow版本下运行表现不同的情况。
排查&修复方案
- 先验证版本差异:分别在两个环境执行如下命令,确认
datasets库版本号是否不同import datasets print(datasets.__version__) - 方案1:适配新版本接口,直接移除
.to_tensor()调用即可,修改后的代码如下features = {x: dataset_tok[x] for x in tokenizer.model_input_names} - 方案2:兼容新旧版本接口,增加异常捕获逻辑,适配所有环境
features = {} for input_name in tokenizer.model_input_names: val = dataset_tok[input_name] try: features[input_name] = val.to_tensor() except AttributeError: features[input_name] = val - 方案3:对齐原有运行环境的依赖版本,在Colab安装和本地完全一致的
datasets版本即可,把下方命令的版本号替换为你本地的版本号!pip install datasets==[你本地的datasets版本号]
内容的提问来源于stack exchange,提问作者ipietri
相关产品推荐
相关产品推荐

