0

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

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

4

1 回答 1

1

请在此处参考 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
于 2021-06-07T16:19:03.633 回答