如何切片或访问Tensor的一行?

时间:2018-01-31 13:17:37

标签: c++ tensorflow slice

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

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 个答案:

答案 0 :(得分:1)

我在源代码中找到了答案。每个Tensor都有函数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
...

但是因为缺少其他文档,我认为这可能会被弃用