2016-06-29 2 views
16

TensorFlow에서 예기치 않은 (최소한 나를 위해) 동작이 나타났습니다. 나는 tf.argmax (- argmin)이 외부에서 내부로 Tensor의 계급에서 작동한다고 생각했지만 외관상으로는 그렇지 않습니까?!TensorFlow : argmax (-min)

예 : inputdimension :

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는 두 개의 인수를. 배열 arr의 인덱스가 arr[rows, columns]이기 때문에 tf.argmax(arr, 0)은 행 당 최대 요소 인덱스를 반환하지만, tf.argmax(arr, 1)은 컬럼 당 최대 요소를 반환 할 것으로 예상됩니다. 마찬가지로 tf.argmin에 대해서도 마찬가지입니다.

그러나, 그 반대가 사실이다 :

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 차원 텐서 tt[i, j, k, ...]에 의해 색인화됩니다. 따라서 t의 순위는 n이고 모양은 (i, j, k, ...)입니다. 치수 0은 i에 해당하므로 치수 1은 j입니다. tf.argmax (& - argmin)이이 구성표를 무시하는 이유는 무엇입니까?

답변

21

dimension 인수가 tf.argmax 인 축을 줄이는 축으로 생각하십시오. tf.argmax(arr, 0)은 크기가 0 인 행, 즉 행을 줄입니다. 행을 줄이면 각 열의 argmax를 얻을 수 있습니다.

반 직관적 일 수 있지만 tf.reduce_max에 사용 된 규칙과 일치해야합니다.

+1

numpy의 [argmax']와 동일한 규칙 (http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html) –

+1

행을 줄이면 argmax를 가져 오는 이유가 무엇인지 설명 할 수 있습니까? 각 개별 열의? 또한 n 차원 텐서의 경우이 동작은 어떻게됩니까? 5D-Tensor에서 'i, j, k, l'또는 'm'을 줄이는 것과 관련하여 어느 차원이 필요한지 알아 내려고합니다. – daniel451

+0

정의에 따라 _across_ 행을 최대로 검색하면 _within_ 열을 검색 중입니다. ''d'' 차원 배열의 경우,''argmax'' _across_'''' 축은''d-1'' 나머지 인덱스의 가능한 조합에 대해 최대 _amongst_''arr [ind1, ind2, ..., ind_i_minus_1, :, ind_i_plus_1, ..., ind_d]''를 검색합니다. – lballes

1

n 차원 텐서에서 임의의 주어진 차원은 이산 2 차원 부분 공간을 형성하는 n-1 차원을 갖습니다. 동일한 논리에 따라, n-2 3 차원 부분 공간, n - (n-1), n ​​차원 부분 공간까지 내려갑니다. 집계중인 나머지 하위 공간 또는 집계중인 하위 공간에서 함수로 집계를 표현할 수 있습니다. 하위 공간은 집계 후에 더 이상 존재하지 않으므로 Tensorflow는이를 하위 차원의 작업으로 구현했습니다.

솔직히 Tensorflow의 제작자가 구현 방법을 선택 했으므로 이제 알 수 있습니다.