ML.Net と onnxruntime を使用して、1 つの入力テンソルと複数の出力テンソル (異なる次元) を持つ Onnx モデルで推論を行いたいと考えています。.GetColumn を使用して目的の出力を取得しました。すべての出力を取得するために、2 つの異なるアプローチを試しました。
1) foreach + .GetColumn を複数回呼び出す:
foreach (var output in ModelOutput)
{
IEnumerable<float[]> column = scoredData.GetColumn<float[]>(output);
all = all.Concat(column);
}
2) 出力を 1 つのテンソルに連結します (パイプラインを定義するとき):
.Append(mlContext.Transforms.ApplyOnnxModel(modelFile: modelLocation, outputColumnNames: ModelOutput, inputColumnNames: ModelInput))
.Append(mlContext.Transforms.Concatenate("all_outs", ModelOutput));
どちらのアプローチでも、推論時間が非常に長くなります。たとえば、私のモデルでは、1 つの出力テンソルに対して 250 ミリ秒、10 テンソルに対して 2500 ミリ秒が必要です。推論時間は、出力の数に応じて倍増します。Python スクリプトで同じモデルを使用すると、すべての出力テンソルを 1 つのリストに取得するのに 100 ミリ秒もかかりません!
私の質問:
- ML.Net で複数の出力を取得する別の方法はありますか?
- 推論時間が倍増するのはなぜですか?