在使用argmax()函數時,好比在深度學習裏面計算acc常常要用到這個參數,這個參數返回的是沿軸axis最大值的索引值,對於,tensorflow和numpy用法是同樣的,此處我就用numpy來舉例說明。dom
argmax(a, axis=None, out=None)
# a 表示array # axis 表示指定的軸,默認是None,表示把array平鋪, # out 默認爲None,若是指定,那麼返回的結果會插入其中
首先咱們看axis=None,也就是默認的時候:函數
a = np.array([[2,5,6],[7,6,1]]) print(np.argmax(a))
輸出結果爲3,由於a裏面7是最大的,若是沒有指定axis,默認就是None,至關於把array平鋪爲:[2,5,6,7,6,1],那麼結果就是3,由於索引3對應的值最大,再來看一下三維的狀況
### 三維array的狀況學習
b = np.random.randint(20,size=[3,2,2]) print(b) [[[ 0 16] [14 5]] [[16 6] [19 2]] [[11 11] [ 5 7]]]
這個裏面,19最大,把它平鋪,19對應的索引就是6,那麼np.argmax(b)就是6,通過驗證輸出就是6ui
若是給定axis,那麼返回的就是沿着給定軸的最大索引,所謂沿着,我以爲就是投影,就是沿着這個軸投影,每一根投影線上最大值的索引。lua
a = np.array([[2,5,6],[7,6,1]]) print(np.argmax(a,axis=1)) [2 0]
此次,咱們給定axis=1,那麼按照咱們說的,就是沿着axis=1投影,看得出來,投影后咱們只有兩個值,由於[2,5,6]在一根投影線上,至關於就是我理解的一個投影線,由於這些值投影后重疊了,至關於只有一個值,因此[7,6,1]也是一個投影線,而後在這兩個投影線取最大值的索引,對於[2,5,6]來講,最大值索引就是2,[7,6,1]最大值索引就是0,因此結果爲[2,0]
而後,咱們分析,當咱們設置axis=0的時候,也就是沿着axis=0,投影,那麼[2,7],[5,6],[6,1]分別在一個投影線上,因此結果爲[1,1,0],通過驗證確實是這樣的。spa
b = np.random.randint(20,size=[3,2,2]) print(b) [[[ 0 16] [14 5]] [[16 6] [19 2]] [[11 11] [ 5 7]]]
仍是用上面的array來講,看一下結果:code
print(np.argmax(b,axis=1)) [[1 0] [1 0] [0 0]]
一樣的分析,咱們指定了軸爲1,那麼也就是說咱們沿着axis=1軸投影,這是一個體,那麼咱們投影線至關於有3*2條,其實在同一根投影線上是axis=0和axis=2的一個組合,好比axis=1中第一個上的和axis=2的第一個上的組合,也就是b[0,:,0],b[0,:,1],b[2,:,0],b[2,:,1],b[3,:,0],b[3,:,1]這六條線的索引對應的最大值,咱們看他們分別爲[ 0 14],[16 5],[16 19],[6 2],[11 5],[11 7],那麼結果就是[[1,0],[1,0],[0,0]]。
因此其實和二維是同樣的,所謂投影線,其實能夠這樣表示,咱們去axis=0,那麼咱們遍歷其餘維度的大小,好比 arr[:,0,0],arr[:,0,1],也就是沿着那個軸,那麼軸取所有值,而後再在投影線上找最大值對應索引。索引
tensorflow裏面的是同樣的用法,同時argmin()用法相同,只是他是求最小值的索引。深度學習