2

我想使用 ML.Net 和 onnxruntime 对具有一个输入张量和多个输出张量(具有不同维度)的 Onnx 模型进行推理。我使用 .GetColumn 来获得所需的输出。为了获得所有输出,我尝试了两种不同的方法:

1)foreach +多次调用.GetColumn:

foreach (var output in ModelOutput)
{
    IEnumerable<float[]> column = scoredData.GetColumn<float[]>(output);
    all = all.Concat(column);                              
}

2)将输出连接成一个张量(定义我的管道时):

.Append(mlContext.Transforms.ApplyOnnxModel(modelFile: modelLocation, outputColumnNames: ModelOutput, inputColumnNames: ModelInput))
.Append(mlContext.Transforms.Concatenate("all_outs", ModelOutput));

这两种方法都会导致非常糟糕的推理时间。例如,我的模型一个输出张量需要 250 毫秒,十个张量需要 2500 毫秒。推理时间会根据输出的数量而倍增。在 Python 脚本中使用相同的模型时,我只需不到 100 毫秒就可以将所有输出张量放在一个列表中!

我的问题:

  • 是否有另一种方法可以在 ML.Net 中获得多个输出?
  • 为什么推理时间成倍增加?
4

0 回答 0