Я хочу сделать вывод для модели Onnx, которая имеет один входной тензор и несколько выходных тензоров (с разными размерами) с ML. Net и onnxruntime. Я использовал .GetColumn, чтобы получить желаемый результат. Чтобы получить все выходные данные, я попробовал два разных подхода:
1) foreach + call .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?
- Почему умножено время вывода?