python numpy之argmax 方法理解

2021-10-13 13:05:01 字數 2017 閱讀 1687

1、numpy之argmax()作用

返回相應維度axis上的最大值的位置。

2、具體應用

深度學習影象分割多分類最後是softmax得分結果,我們需要將這個浮點型的結果儲存成整型的標籤影象,這樣才算完成影象分割。softmax結果轉成標籤的過程就需要numpy的argmax()方法。

來乙個具體案例,假設我們的softmax輸出的得分結果是(2,2,3)的矩陣,如下圖,2行2列的影象,裡面有3個類別。

那麼我們要轉化成對應的標籤應該是

我們來看看numpy的argmax是怎麼工作的。

首先需要說明一點,當通道順序在最後時,圖1中在numpy表示的形式是:

softmax_score=np.array([[[0.8,0.1,0.1],[0.2,0.7,0.1]],[[0.05,0.05,0.9],[0.7,0.2,0.1]]])

print(sofmax_score)

label=softmax_score.argmax(axis=2)

print(label)

下面具體來分析下argmax的計算思路。首先我用的keras的backend是tensorflow,所以通道是在最後,(2,2,3)表明是2行2列,然後是3類。這裡需要很清楚numpy中的axis引數,最重要的是理解每一層對應乙個維度。

再來看argmax(axis=2)中的axis=2,表明是對第三層內的資料進行最大值位置判斷。

來看softmax_socre的第三層裡面都有啥,分別是[0.8,0.1,0.1]、[0.2,0.7,0.1]、[0.05,0.05,0.9]、[0.7,0.2,0.1]。argmax()方法就是返回最大值的位置,[0.8,0.1,0.1]中最大值為0.8,在第0個位置,返回為0,同理[0.2,0.7,0.1]最大值是第1位的0.7,返回為1,[0.05,0.05,0.9]返回2,[0.7,0.2,0.1]返回0。

那麼接下來該咋組合呢?我的部落格裡有介紹,numpy在某一軸上做完計算後會刪除這一層的,保留其他的,所以有下面的過程

[[[0.8 , 0.1 , 0.1 ],

[0.2 , 0.7 , 0.1 ]],

[[0.05, 0.05, 0.9 ],

[0.7 , 0.2 , 0.1 ]]]

在第三層裡面進行計算判斷,初步結果

[[[0],

[1 ]],

[[2 ],

[0]]]

然後刪除第三層的

[[0,

1 ],

[2 ,

0]]

這就是我們想要的結果

[[0,1],

[2,0]]

這就是最終想要的標籤結果

1、這裡有個點容易混淆,就是通道的位置,有的是在前比如theano,有的是在後比如tensorflow。還拿上面的例子說明通道在前的情況,

通道在前時,資料在numpy的表示為

由於通道在前,所以這裡argmax的axis=0。

Python Numpy之linspace用法說明

linspace生成有序列表,重點在資料範圍與資料個數上 linspace 0,1,11 即從0到1閉區間,劃分為11個資料點 import numpy as np a np.linspace 0,1 a array 0.0.11111111,0.www.cppcns.com22222222,0.3...

Lua 可變引數之arg與select

1 function testfunc 2 local arg lua 5 2以後不再支援預設arg引數,與.之間要有空格 3 print 輸入的引數個數 arg 4for i,v in ipairs arg do 5print v 6end 7end 8 print 9function testf...

Python NumPy學習筆記之矩陣

建立numpy矩陣 a np.mat 1 2 3 4 5 6 7 8 9 b np.matrix 1,2,3 4,5,6 7,8,9 print a,n b 小矩陣合成大矩陣 a np.diag 1,2,3 b np.eye 3 c np.bmat a b 橫向合成矩陣 d np.bmat a b ...