访问 TensorFloat 数据

问题描述

我正在使用 Windows-Machine-Learning 将我的 VideoFrame 转换为 TensorFloat _input(形状:1,3,256,192;RGB 通道 + 图像),将其加载到我的 onnx 模型中并接收作为 _output一个 TensorFloat 对象(形状:1,17,64,48;17 个检测到的对象 + 图像)。

现在我的问题是:如果我想访问那个 TensorFloat _output,目前我知道的唯一方法是使用 _output.data.GetAsvectorView,它给了我一个很长的 1d Vector 并尝试重新排序并弄清楚其中的尺寸是如何排序的?是否有一个明确的规则可以让我理解 4D 张量是如何在 1D Vector 中编码的?或者,我能否以某种方式直接从 _output TensorFloat 对象访问不同的维度,因为使用“Shape”显示它是一个多维数组?

解决方法

请在此处参考 Windows ML 张量的布局:

https://docs.microsoft.com/en-us/uwp/api/windows.ai.machinelearning.tensorfloat?view=winrt-20348

张量是值的多维数组。浮点张量是 32 位浮点值的张量。

张量的布局是以行为主,用紧密包装的连续数据表示每个维度。张量的总大小是每个维度大小的乘积。

考虑:

Shape: [D1][D2][D3]...[DN]
Strides: [S1][S2][S3]...[SN]
Location: [A1][A2][A3]...[AN],

并且您希望计算 Location 处的索引。

然后,您可以假设:

Sn = Dn+1 * Dn+2 * ... * Dn,(for n = 1...N-1)
SN = 1

所以:

index = A1*S1 + A2*S2 + A3*S3 + ... + AN*SN

相关问答

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