【问题标题】:How to multiple two Eigen tensors along batch dimension?如何沿批量维度增加两个特征张量?
【发布时间】:2017-10-31 16:28:45
【问题描述】:

例如,我有一个张量 A(2,3,4) 和张量 B(3,4),并且想要使 A 沿维度 0(批量维度)与 B 进行 koefs 乘法(不是收缩操作)。如何在没有 for 循环的情况下执行此操作?

【问题讨论】:

    标签: eigen multiplication eigen3 tensor


    【解决方案1】:

    如果我理解您的问题,您可以先将 B 重塑为 (1,3,4),然后使用广播沿轴 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 2021-12-01
      • 2020-07-20
      • 2021-07-17
      • 2020-01-25
      • 2021-09-05
      • 2019-02-22
      • 2014-02-25
      相关资源
      最近更新 更多