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
关于类型为numpy,TensorFlow.tensor,torch.tensor的shape变化以及相互转化