numpy 和tensorflow中argmax(),argmin()函數使用講解


在使用argmax()函數時,比如在深度學習里面計算acc經常要用到這個參數,這個參數返回的是沿軸axis最大值的索引值,對於,tensorflow和numpy用法是一樣的,此處我就用numpy來舉例說明。

argmax(a, axis=None, out=None)
# a 表示array # axis 表示指定的軸,默認是None,表示把array平鋪, # out 默認為None,如果指定,那么返回的結果會插入其中
  • 1
  • 2
  • 3
  • 4

對於axis默認為None的情況

首先我們看axis=None,也就是默認的時候:

二維array情況

a = np.array([[2,5,6],[7,6,1]]) print(np.argmax(a))
  • 1
  • 2

輸出結果為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]]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

這個里面,19最大,把它平鋪,19對應的索引就是6,那么np.argmax(b)就是6,經過驗證輸出就是6

對於給定axis的情況

如果給定axis,那么返回的就是沿着給定軸的最大索引,所謂沿着,我覺得就是投影,就是沿着這個軸投影,每一根投影線上最大值的索引。

二維情況分析

a = np.array([[2,5,6],[7,6,1]]) print(np.argmax(a,axis=1)) [2 0]
  • 1
  • 2
  • 3

這次,我們給定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],經過驗證確實是這樣的。

三維情況分析

b = np.random.randint(20,size=[3,2,2]) print(b) [[[ 0 16] [14 5]] [[16 6] [19 2]] [[11 11] [ 5 7]]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

還是用上面的array來說,看一下結果:

print(np.argmax(b,axis=1)) [[1 0] [1 0] [0 0]]
  • 1
  • 2
  • 3
  • 4

同樣的分析,我們指定了軸為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()用法相同,只是他是求最小值的索引。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM