我刚刚注意到TensorFlow中的一个意外行为(至少对我来说)。我以为张量从外到内的排列是由外到内进行的,但显然不是吗?!
例子:

import numpy as np
import tensorflow as tf

sess = tf.InteractiveSession()

arr = np.array([[31, 23,  4, 24, 27, 34],
                [18,  3, 25,  0,  6, 35],
                [28, 14, 33, 22, 20,  8],
                [13, 30, 21, 19,  7,  9],
                [16,  1, 26, 32,  2, 29],
                [17, 12,  5, 11, 10, 15]])

# arr has rank 2 and shape (6, 6)
tf.rank(arr).eval()
> 2
tf.shape(arr).eval()
> array([6, 6], dtype=int32)

tf.argmax采用两个参数:argmintf.argmax。由于数组的索引inputdimension,所以我希望arr返回每行最大元素的索引,而我希望arr[rows, columns]返回每列最大元素的索引。同样适用于tf.argmax(arr, 0)
然而,事实恰恰相反:
tf.argmax(arr, 0).eval()
> array([0, 3, 2, 4, 0, 1])

# 0 -> 31 (arr[0, 0])
# 3 -> 30 (arr[3, 1])
# 2 -> 33 (arr[2, 2])
# ...
# thus, this is clearly searching for the maximum element
# for every column, and *not* for every row

tf.argmax(arr, 1).eval()
> array([5, 5, 2, 1, 3, 0])

# 5 -> 34 (arr[0, 5])
# 5 -> 35 (arr[1, 5])
# 2 -> 33 (arr[2, 2])
# ...
# this clearly returns the maximum element per row,
# albeit 'dimension' was set to 1

有人能解释这种行为吗?
广义的每一个n维张量都是由tf.argmax(arr, 1)索引的。因此,tf.argmin具有n级和形状。因为维度0对应于t,维度1对应于t[i, j, k, ...],以此类推。为什么t(&-(i, j, k, ...))忽略此方案?

最佳答案

dimensiontf.argmax参数看作是减少的轴。tf.argmax(arr, 0)在尺寸上减小,即行。跨行减少意味着您将获得每个单独列的argmax。
这可能是违反直觉的,但它符合0等中使用的惯例。

关于python - TensorFlow:argmax(-min),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38094217/

10-13 00:34