Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将形状(n,k)的张量与libtorch中形状(k)的张量叠加?_C++_Torch_Libtorch - Fatal编程技术网

C++ 如何将形状(n,k)的张量与libtorch中形状(k)的张量叠加?

C++ 如何将形状(n,k)的张量与libtorch中形状(k)的张量叠加?,c++,torch,libtorch,C++,Torch,Libtorch,torch::stack接受一个c10::TensorList,当给定相同形状的张量时,它工作得非常好。但是,当您尝试发送以前的torch::stacked张量的输出时,它会失败并导致内存访问冲突 更具体地说,假设我们有3个形状为4的张量,如: torch::tensorx1=torch::randn({4}); torch::Tensor x2=torch::randn({4}); torch::张量x3=torch::randn({4}); torch::张量y=torch::randn({

torch::stack
接受一个
c10::TensorList
,当给定相同形状的张量时,它工作得非常好。但是,当您尝试发送以前的
torch::stack
ed张量的输出时,它会失败并导致内存访问冲突

更具体地说,假设我们有3个形状为4的张量,如:

torch::tensorx1=torch::randn({4});
torch::Tensor x2=torch::randn({4});
torch::张量x3=torch::randn({4});
torch::张量y=torch::randn({4});
第一轮堆叠非常简单:

torch::Tensor stacked_xs=torch::stack({x1,x2,x3});
然而,尝试做:

torch::Tensor stacked_result=torch::stack({y,stackedxs});
将失败。 我希望在Python中获得与
np.vstack
中相同的行为,在Python中这是允许的,并且可以工作。
我该怎么做呢?

您可以使用
torch::unsqueze
y
添加维度。然后使用
cat
(不是
stack
,与numpy不同,但结果将是您所要求的):

根据您的喜好,还可以展平第一个堆栈,然后重塑其形状:

torch::Tensor stacked_xs = torch::stack({x1,x2,x3});
torch::Tensor stacked_result = torch::cat({y, stacked_xs.view({-1}}).view({4,4});

您可以使用
torch::unsqueze
将维度添加到
y
。然后使用
cat
(不是
stack
,与numpy不同,但结果将是您所要求的):

根据您的喜好,还可以展平第一个堆栈,然后重塑其形状:

torch::Tensor stacked_xs = torch::stack({x1,x2,x3});
torch::Tensor stacked_result = torch::cat({y, stacked_xs.view({-1}}).view({4,4});

我想不出更好的标题了!有什么更好的标题吗?请提出建议,以便更清楚。我想不出更好的标题了!有什么更好的标题吗?请建议更清楚,谢谢。第二种方法对我来说似乎更实用。无论如何,非常感谢您的时间和热情的响应错误:视图解决方案似乎不起作用,因为它会导致以下异常:
堆栈期望每个张量大小相等,但在条目0处得到[4],在条目1处得到[12]
是的,这是一个小错误,将堆栈与cat混淆,感谢您指出。现在可以了:)非常感谢。第二种方法对我来说似乎更实用。无论如何,非常感谢您的时间和热情的响应错误:视图解决方案似乎不起作用,因为它会导致以下异常:
堆栈期望每个张量大小相等,但在条目0处得到[4],在条目1处得到[12]
是的,这是一个小错误,将堆栈与cat混淆,感谢您指出。现在可以了:)