0
예를 들어, 나는 텐서 A (2,3,4)와 텐서 B (3,4)를 가지고 있으며 B의 치수 0 (일괄 처리 차원)을 따라 A의 koefs 곱셈 (수축 연산 아님)을 만들고 싶습니다. for 루프없이 이것을 할 수 있습니까?일괄 처리 치수에 따라 두 개의 고유 장력을 여러 개 만드는 방법은 무엇입니까?
예를 들어, 나는 텐서 A (2,3,4)와 텐서 B (3,4)를 가지고 있으며 B의 치수 0 (일괄 처리 차원)을 따라 A의 koefs 곱셈 (수축 연산 아님)을 만들고 싶습니다. for 루프없이 이것을 할 수 있습니까?일괄 처리 치수에 따라 두 개의 고유 장력을 여러 개 만드는 방법은 무엇입니까?
나는 당신의 질문을 이해한다면, 먼저 (1,3,4)로 B를 바꿀 수 있고 다음이 매우 효율적입니다 알고하지 마십시오 축 0에 따라 값을 복제하는 방송 사용하지만, 그것을 작동합니다.
auto A = Tensor<float, 3>(2, 3, 4);
A.setValues({
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
},{
{ 10,20,30,40 },
{ 50,60,70,80 },
{ 90,100,110,120 },
}
});
auto W = Tensor<float, 2>(3,4);
W.setValues({
{ 1,2,3,4 },
{ 5,6,7,8 },
{ 9,10,11,12 }
});
auto three_dims = Eigen::array<int, 3>({ 1,3,4 });
auto bcast = Eigen::array<int, 3>({ 2,1,1 });
auto X = W.reshape(three_dims).broadcast(bcast);
auto Y = A*X;
std::cout << Y << std::endl;
인쇄 :
1 25 81 4 36 100 9 49 121 16 64 144
10 250 810 40 360 1000 90 490 1210 160 640 1440