为什么 tensorflow 在 reduce_max、reduce_min、reduce_sum 等中使用 reduce_*?
Why does tensorflow uses reduce_* in reduce_max, reduce_min, reduce_sum etc?
我总是试图找到与函数名称相关的语义,因为这确实有助于理解和连接事物。
我只是想了解为什么 Google 想出了 reduce_* 方法的命名约定,例如:
- reduce_all
- reduce_any
- reduce_join
- reduce_logsumexp
- reduce_max
- reduce_mean
- reduce_min
- reduce_prod
- reduce_sum
是不是因为所有这些操作都降低了输入张量的维度?
Reduce
只是一系列操作的名称,这些操作用于从对象序列创建单个对象,重复应用相同的二进制操作。
例如,数组的求和可以看作是对序列的前两个元素进行 +
运算的应用,然后是结果与第三个元素的求和,依此类推。这给出了整个数组的总和。因此,sum(1, 2, 3, 4)
可以计算为 (((1 + 2) + 3) + 4)
。 reduce 的这种实现在计算上效率低下,因为所有计算都是按顺序进行的,因此 tensorflow(和其他软件)使用并行 reduce(其中 sum(1, 2, 3, 4) 的计算方式类似于 (1 + 2) + (3 + 4)), 但这只是细节。
我总是试图找到与函数名称相关的语义,因为这确实有助于理解和连接事物。
我只是想了解为什么 Google 想出了 reduce_* 方法的命名约定,例如:
- reduce_all
- reduce_any
- reduce_join
- reduce_logsumexp
- reduce_max
- reduce_mean
- reduce_min
- reduce_prod
- reduce_sum
是不是因为所有这些操作都降低了输入张量的维度?
Reduce
只是一系列操作的名称,这些操作用于从对象序列创建单个对象,重复应用相同的二进制操作。
例如,数组的求和可以看作是对序列的前两个元素进行 +
运算的应用,然后是结果与第三个元素的求和,依此类推。这给出了整个数组的总和。因此,sum(1, 2, 3, 4)
可以计算为 (((1 + 2) + 3) + 4)
。 reduce 的这种实现在计算上效率低下,因为所有计算都是按顺序进行的,因此 tensorflow(和其他软件)使用并行 reduce(其中 sum(1, 2, 3, 4) 的计算方式类似于 (1 + 2) + (3 + 4)), 但这只是细节。