如何切片或访问张量的一行?
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基础 - 张量的索引与切片