zoukankan      html  css  js  c++  java
  • 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()用法相同,只是他是求最小值的索引。

  • 相关阅读:
    BEM(Block–Element-Modifier)
    http://element.eleme.io/#/zh-CN/component/quickstart
    Commit message 的写法规范。本文介绍Angular 规范(
    好的commit应该长啥样 https://github.com/torvalds/linux/pull/17#issuecomment-5654674
    代码管理
    if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary
    Martin Fowler’s Active Record design pattern.
    The Zen of Python
    Introspection in Python How to spy on your Python objects Guide to Python introspection
    Object-Oriented Metrics: LCOM 内聚性的度量
  • 原文地址:https://www.cnblogs.com/psztswcbyy/p/9282530.html
Copyright © 2011-2022 走看看