如何将 ONNX result = Object {Microsoft.ML.OnnxRuntime.Tensors.DenseTensor<long>} 更改为Something?

问题描述

你好!

我对 Microsoft ML ONNX 非常陌生。

使用“Visual Studio 2019”、“Windows Forms App”和“.NET framework(C# 7.3 ver)”制作 GUI

我使用python sklearn制作简单的KNN,然后导出为ONNX形式。

MS VS Forms 通过串行通信从 DSP 接收 Sensor 数据,然后程序使用传感器数据为 ONNX InferenceSession 制作输入张量(1*3 浮点密集张量)。

我的 ONNX 预测代码如下所示。

private void Predict()
    {
        string Filepath = "C:\\Users\\lee5w\\source\\repos\\Rehabilitation\\Rehabilitation\\Resource\\KNN.onnx";

        InferenceSession session = new InferenceSession(Filepath);
        DenseTensor<float> T1;

        float[,] Predict_input = new float[1,3];
        Predict_input[0,0] = (float)value[5];
        Predict_input[0,1] = (float)value[6];
        Predict_input[0,2] = (float)value[7];

        RMS1.Text = "RMS1: " + value[5].ToString();
        RMS2.Text = "RMS2: " + value[6].ToString();
        RMS3.Text = "RMS3: " + value[7].ToString();

        T1 = Predict_input.ToTensor();
        var inputMeta = session.InputMetadata;
        var outputMeta = session.OutputMetadata;

        var inputs1 = new List<NamedOnnxValue>();

        foreach (var name in inputMeta.Keys)
        {
          inputs1.Add(NamedOnnxValue.CreateFromTensor<float>(name,T1));
        }
        try
        {
            //IdisposableReadOnlyCollection<disposableNamedOnnxValue> Run(IReadOnlyCollection<NamedOnnxValue> inputs,IReadOnlyCollection<string> desiredOutputNodes);
            var results = session.Run(inputs1); //IdisposableReadOnlyCollection<disposableNamedOnnxValue> 
            // dump the results
            var inferenceResult = results.ToList()[0];
            var inferenceResult_Value = inferenceResult.Value;
            var Output = session.Run(inputs1).ToList().First().AsEnumerable<NamedOnnxValue>();
        }
        catch (Exception error)
        {
            MessageBox.Show(error.Message);
        }
    }

在调试状态下,我可以找到 'result.ToList()[0]' 是 output_label。 所以我尝试使用'result.ToList()[0]'的值,但我不能把它变成任何不同的形状。

Image of visual studio debug values

我尝试张量形式、列表形式、字典形式,但它们返回“空”。 当我使用 .ToString() 它返回 'microsoft.ml.OnnxRuntime.Tensors.DenseTensor'

有没有人知道如何将'Object {microsoft.ml.OnnxRuntime.Tensors.DenseTensor}'的值变成字符串或整数?

Inside of Object {Microsoft.ML.OnnxRuntime.Tensors.DenseTensor}

解决方法

我只是找到了自己的答案。

事情是这样的。

var Test = results.ToList()[0].AsTensor<long>().ToArray<long>()[0].ToString();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...