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 ...