如何切片或访问张量的一行?

Posted

技术标签:

【中文标题】如何切片或访问张量的一行?【英文标题】:How to slice or acces a row of a Tensor? 【发布时间】:2018-07-10 14:55:24 【问题描述】:

我有一个存储在 3D 张量中的数据集。我希望每个样本都有一个自己的张量用于分析目的。不幸的是,我只知道访问这样一个容器的 brute force 方法:

auto tensor_dataset_map = dataset.tensor<float,3>();
for(int sample = 0; sample < maxSamples; sample++)
   for(int time = 0; time < periodSize; time++)
      for(int feature = 0; feature < amountOfFeatures; feature++)
         cout << tensor_dataset_map(sample,time,feature);

我很想避免这种情况。但是,如果我尝试用常识获取第一个样本的所有元素 (=0):

tensor_dataset_map(0) 

是一样的

tensor_dataset_map(0,0,0)

形状为(1),我需要形状为(1,periodSize,amountOfFeatures)的张量

有没有一种简单的方法我真的必须采用这种未经优化的方式?

【问题讨论】:

【参考方案1】:

我在源代码中找到了答案。每个张量都有函数Slice(): Slice this tensor along the 1st dimension.,其中需要说明切片和偏移的参数开始。

换句话说,在我的情况下,迭代需要:

cout<<dataset.Slice(0,1).tensor<float,3>()<<endl
cout<<dataset.Slice(1,2).tensor<float,3>()<<endl
cout<<dataset.Slice(2,3).tensor<float,3>()<<endl
cout<<dataset.Slice(3,4).tensor<float,3>()<<endl
...

但由于缺乏其他文档,我认为这可能会被弃用

【讨论】:

以上是关于如何切片或访问张量的一行?的主要内容,如果未能解决你的问题,请参考以下文章

当切片本身是张量流中的张量时如何进行切片分配

Tensorflowjs - 将 4d 张量重塑/切片成图像

[TensorFlow系列-17]:TensorFlow基础 - 张量的索引与切片

[PyTroch系列-17]:PyTorch基础 - 张量的索引与切片

如何有效地分配给 TensorFlow 中的张量切片

Keras:如何使用来自另一个张量的信息对张量进行切片?