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

使用return_tensors="tf"生成BERT嵌入时遇'EagerTensor'无'size'属性错误

解决HuggingFace Transformers中PyTorch模型与TensorFlow张量不兼容问题

问题描述

作为HuggingFace Transformers新手,编写了如下测试代码:

from transformers import BertTokenizer, BertModel

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

title = "Today is Monday"
tokens = tokenizer([title], return_tensors="tf", truncation=True, padding=True)
outputs = model(**tokens)

运行时抛出如下异常:

Traceback (most recent call last):
  File "/anaconda3/envs/recommenders/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/anaconda3/envs/recommenders/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/root/.vscode-server/extensions/ms-python.python-2023.8.0/pythonFiles/lib/python/debugpy/adapter/../../debugpy/launcher/../../debugpy/__main__.py", line 39, in <module>
    cli.main()
  File "/root/.vscode-server/extensions/ms-python.python-2023.8.0/pythonFiles/lib/python/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 430, in main
    run()
  File "/root/.vscode-server/extensions/ms-python.python-2023.8.0/pythonFiles/lib/python/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 284, in run_file
    runpy.run_path(target, run_name="__main__")
  File "/root/.vscode-server/extensions/ms-python.python-2023.8.0/pythonFiles/lib/python/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 321, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "/root/.vscode-server/extensions/ms-python.python-2023.8.0/pythonFiles/lib/python/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 135, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "/root/.vscode-server/extensions/ms-python.python-2023.8.0/pythonFiles/lib/python/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 124, in _run_code
    exec(code, run_globals)
  File "/opt/nwdata/tests/recommenders/examples/00_quick_start/test.py", line 9, in <module>
    outputs = model(**tokens)
  File "/anaconda3/envs/recommenders/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl
    return forward_call(*input, **kwargs)
  File "/anaconda3/envs/recommenders/lib/python3.9/site-packages/transformers/models/bert/modeling_bert.py", line 962, in forward
    input_shape = input_ids.size()
  File "/anaconda3/envs/recommenders/lib/python3.9/site-packages/tensorflow/python/framework/ops.py", line 437, in __getattr__
    raise AttributeError("""
AttributeError: 
        'EagerTensor' object has no attribute 'size'.
        If you are looking for numpy-related methods, please run the following:
        from tensorflow.python.ops.numpy_ops import np_config
        np_config.enable_numpy_behavior()

将return_tensors设为"pt"时程序可正常运行,但后续需将结果用于TensorFlow程序,必须设置为"tf",需要解决该兼容问题。

解决方案

  • 使用TensorFlow版本的BERT模型(推荐)
    你当前导入的BertModel是PyTorch实现版本,仅支持PyTorch张量;而你生成的是TensorFlow张量,两者方法不兼容导致报错。直接替换为TensorFlow实现的TFBertModel即可,它原生支持TensorFlow张量,输出结果可直接用于后续TensorFlow程序:

    from transformers import BertTokenizer, TFBertModel
    
    tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
    # 加载TensorFlow版本的BERT模型
    model = TFBertModel.from_pretrained('bert-base-uncased')
    
    title = "Today is Monday"
    tokens = tokenizer([title], return_tensors="tf", truncation=True, padding=True)
    outputs = model(**tokens)
    
  • 临时兼容方案(不推荐)
    若因特殊原因必须使用PyTorch模型,可通过张量转换或启用TensorFlow numpy兼容行为解决,但会增加不必要的性能开销,且后续仍需将PyTorch输出转回TensorFlow张量:

    # 方法1:将TensorFlow张量转换为PyTorch张量,后续再转回TensorFlow
    import torch
    import tensorflow as tf
    
    tokens_pt = {k: torch.tensor(v.numpy()) for k, v in tokens.items()}
    outputs_pt = model(**tokens_pt)
    # 将PyTorch输出转回TensorFlow张量
    outputs_tf = {k: tf.convert_to_tensor(v.detach().numpy()) for k, v in outputs_pt.items()}
    
    # 方法2:启用TensorFlow numpy兼容行为,解决size()方法报错
    from tensorflow.python.ops.numpy_ops import np_config
    np_config.enable_numpy_behavior()
    outputs = model(**tokens)
    

内容的提问来源于stack exchange,提问作者Patrick Ng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:44:58