python numpy之argmax()方法理解

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的表示为

channel_first=np.array([[[0.8,0.2],[0.05,0.7]],[[0.1,0.7],[0.05,0.2]],[[0.1,0.1],[0.9,0.1]]])
print(channel_first.shape)
label = channel_first.argmax(axis=0)

在这里插入图片描述
由于通道在前,所以这里argmax的axis=0。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪子私房菜

给小强一点爱心呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值