tensorflow::Tensor 的 flat 方法以啥顺序返回数据?

Posted

技术标签:

【中文标题】tensorflow::Tensor 的 flat 方法以啥顺序返回数据?【英文标题】:In what order does tensorflow::Tensor's flat method return the data?tensorflow::Tensor 的 flat 方法以什么顺序返回数据? 【发布时间】:2021-10-22 08:29:16 【问题描述】:

假设我创建了一个具有以下维度的张量

[num_tracks,num_frames,height,width,num_channels]

 *output = tensorflow::Tensor(tensorflow::DataType::DT_UINT8,
                               4, 11, 128, 128, 3);

然后我用 flat 方法返回数据。

auto data = output->flat<uint8>().data();

如果我遍历展平的数据,数据将以什么顺序返回 ++数据?

会不会

[(track1, frame1, row1,column1,channel1), (...,channel2), (...,channel3),(...,column2,channel1)]

来自docs,它没有描述顺序:

这些方法允许您访问具有您选择的维度和大小的数据。您无需知道张量的维数即可调用它们。但是,他们会检查类型是否匹配,并且请求的维度会创建一个 Eigen::Tensor,其元素数量与张量相同。

    typedef float T;
    Tensor my_ten(...built with Shapeplanes: 4, rows: 3, cols: 5...);
    // 1D Eigen::Tensor, size 60:
    auto flat = my_ten.flat();

【问题讨论】:

【参考方案1】:

在TF源中搜索文件tf_tensor.h,其中包含以下句子

// --------------------------------------------------------------------------
// TF_Tensor holds a multi-dimensional array of elements of a single data type.
// For all types other than TF_STRING, the data buffer stores elements
// in row major order.  E.g. if data is treated as a vector of TF_DataType:
//
//   element 0:   index (0, ..., 0)
//   element 1:   index (0, ..., 1)
//   ...

TF 的张量的扁平化数据的行为类似于 C 中的多维数组 - 当您越过张量时,索引将从右向左更改。假设您有一个二维数组,其尺寸为 2x2,顺序为:[0][0]、[0][1]、[1][0]、[1][1]。

Here you have my answer 描述了当您有指向展平数据的指针时如何创建访问 3D 张量的方法。

【讨论】:

以上是关于tensorflow::Tensor 的 flat 方法以啥顺序返回数据?的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow::Tensor 到 python Tensor 或 numpy.nd_array

AI - TensorFlow Tensor

关于类型为numpy,TensorFlow.tensor,torch.tensor的shape变化以及相互转化

tensorflow tensor 索引

TensorFlow tensor张量拼接concat & stack

tensorflow与pytorch张量互转