如何使用割炬提供的功能优化5层循环?

时间:2020-01-02 09:30:04

标签: pytorch vectorization

x是具有(16,10,4,25,53)形状的张量,y的大小与x相同。
mean的形状为(25,53),jcac的大小均为(16,10,4)。

如何使用割炬功能优化以下表达式?

for k in range(x.size()[0]):
    for s in range(x.size()[1]):
        for u in range(x.size()[2]):
            for i in range(x.size()[3]):
                for j in range(x.size()[4]):
                    num1 += (x[k][s][u][i][j] - mean[i][j] - jc[k][s][u]) * (y[k][s][u][i][j] - mean[i][j] - ac[k][s][u])
                    num2 += (y[k][s][u][i][j] - mean[i][j] - jc[k][s][u]) ** 2
                    num3 += (y[k][s][u][i][j] - mean[i][j] - ac[k][s][u]) ** 2

1 个答案:

答案 0 :(得分:2)

我认为您正在沿着单例尺寸查看broadcasting的张量。
首先,您需要尺寸的 number 相同,因此,如果[ 0 10 50 9 50 80 20 30 51 170] [ 9 1 240 20 0 69] 的形状为mean,则(25,53)的形状为mean[None, None, None, ...]-您没有在基础数据中进行任何更改,但是维度的 number 现在为5而不是2,并且这些单例维度可以广播为(1, 1, 1, 25, 53)和{{1 }}。

使用广播优化的代码如下:

x