1

我想在 python 中使用 onnxruntime 来推断来自 onnx 模型的许多输入的输出。一种方法是使用 for 循环,但这似乎是一种非常琐碎且缓慢的方法。有没有办法和sklearn一样?

onnxruntime 的单一预测:

import onnxruntime as ort
sess = ort.InferenceSession("xxxxx.onnx")
input_name = sess.get_inputs()
label_name = sess.get_outputs()[0].name

pred_onnx= sess.run([label_name], {
    input_name[0].name: np.array([[40]]).astype(np.int64),
    input_name[1].name: np.array([[0]]).astype(np.int64),
    input_name[2].name: np.array([[0]]).astype(np.int64)
})
pred_onnx

>> Output: [array([[23]], dtype=float32)]

sklearn 中的单/多预测(取决于 的大小x_test):

test_predictions = model.predict(x_test)
4

1 回答 1

0

最好的方法是让 ONNX 模型支持批处理。根据您提供的输入,它可能已经这样做了。您的 3 个输入的形状似乎为 [1,1],而您的输出的形状为 [1,1],这可能意味着第一个维度是批量大小。形状为 [2,1](2 个批次,每批次 1 个元素)的示例输入看起来像 [[40],[50]]。

我猜如果你提供两批输入,你会得到两个输出,所以像这样

pred_onnx= sess.run([label_name], {
  input_name[0].name: np.array([[40],[40]]).astype(np.int64),
  input_name[1].name: np.array([[0],[0]]).astype(np.int64),
  input_name[2].name: np.array([[0],[0]]).astype(np.int64)
})

可以输出 [array([[23],[23]], dtype=float32)]

于 2021-04-28T05:56:07.013 回答