c++ - 如何在libtorch中将形状(n,k)的张量与形状(k)的张量堆叠?
问题描述
torch::stack
接受 ac10::TensorList
并且在给出相同形状的张量时工作得很好。但是,当您尝试发送先前torch::stack
编辑的张量的输出时,它会失败并导致内存访问冲突。
更具体地说,假设我们有 3 个形状为 4 的张量,例如:
torch::Tensor x1 = torch::randn({4});
torch::Tensor x2 = torch::randn({4});
torch::Tensor x3 = torch::randn({4});
torch::Tensor y = torch::randn({4});
第一轮堆叠是微不足道的:
torch::Tensor stacked_xs = torch::stack({x1,x2,x3});
但是,尝试这样做:
torch::Tensor stacked_result = torch::stack({y, stacked_xs});
将失败。我希望获得与np.vstack
Python 中相同的行为,这是允许并有效的。我该怎么办?
解决方案
y
您可以向with添加维度torch::unsqueeze
。然后与cat
(not stack
,与 numpy 不同,但结果将是您所要求的) 连接:
torch::Tensor x1 = torch::randn({4});
torch::Tensor x2 = torch::randn({4});
torch::Tensor x3 = torch::randn({4});
torch::Tensor y = torch::randn({4});
torch::Tensor stacked_xs = torch::stack({x1,x2,x3});
torch::Tensor stacked_result = torch::cat({y.unsqueeze(0), stacked_xs});
也可以根据您的喜好展平您的第一个堆栈然后对其进行重塑:
torch::Tensor stacked_xs = torch::stack({x1,x2,x3});
torch::Tensor stacked_result = torch::cat({y, stacked_xs.view({-1}}).view({4,4});
推荐阅读
- python - Tensorflow 占位符 vs Tensorflow 常量 vs Numpy 数组
- python - 我把一些 Python 代码转成 R 格式,但是输出不一样
- node.js - 虚拟填充计算文档的替代方法是什么?虚拟填充对模型的影响是什么?
- firebase - 如何禁用基于数据库(firebase)查询的页面?
- elasticsearch - 索引中现有文档的 IDF 重新计算?
- python - 如何用漂亮的汤选择某个元素
- r - For 循环帮助 (R)
- javascript - 从 js.plotly 重叠创建的 svg 容器
- mysql - 是什么导致错误“列与第 1 行的值计数不匹配”?
- ios - String.removingPercentEncoding 在特别大的字符串上返回 nil