ONNX版RoBERTa分类模型报错:'Tensor'对象无'keys'属性
问题原因
ONNX Runtime 的 ort_session.run() 方法要求第二个参数是输入节点名称与对应张量的字典,而非直接传入单个张量。当你直接传入 Tensor 对象时,Runtime 会将其当作字典尝试调用 keys() 方法,因此触发 AttributeError: 'Tensor' object has no attribute 'keys'。
解决方案
1. 确认模型的输入节点名称
运行以下代码获取模型定义的输入节点名称,避免传错键名:
import onnxruntime as ort # 加载你的ONNX模型 ort_session = ort.InferenceSession("your_model_path.onnx") # 提取所有输入节点的名称 input_names = [inp.name for inp in ort_session.get_inputs()] print("模型输入节点名称:", input_names)
2. 构造符合要求的输入字典
将批量处理得到的张量,以「输入节点名称: 张量」的键值对形式包装成字典,再传入 run() 方法:
# 假设input_tensor是你处理好的批量张量(如形状为[74, 序列长度]的Tensor/NumPy数组) # 取第一个输入节点名称作为键(如果模型有多个输入,需全部加入字典) input_dict = {input_names[0]: input_tensor} # 执行批量推理 outputs = ort_session.run(None, input_dict)
注意事项
- 如果模型需要多个输入(如
input_ids、attention_mask),需将所有对应的张量都加入字典,键名必须和模型输入节点名称完全匹配。 - 确保张量的形状、数据类型与模型要求一致(例如用 NumPy 数组而非 PyTorch Tensor,或者转换为 ONNX Runtime 兼容的张量类型)。
内容的提问来源于stack exchange,提问作者Jesper Ezra
相关产品推荐
相关产品推荐

