zoukankan      html  css  js  c++  java
  • 如何用Python计算Softmax?

    Softmax函数,或称归一化指数函数,它能将一个含任意实数的K维向量z“压缩”到另一个K维实向量(sigma{(z)})中,使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。该函数的形式通常按下面的式子给出:

    [sigma{(z)_j}=frac{e^{z_j}}{sum_{k=1}^{K} e^{z_k}} quad for \, j = 1, ..., K ]

    输入向量 [1,2,3,4,1,2,3]对应的Softmax函数的值为[0.024,0.064,0.175,0.475,0.024,0.064,0.175]。输出向量中拥有最大权重的项对应着输入向量中的最大值“4”。

    这也显示了这个函数通常的意义:对向量进行归一化,凸显其中最大的值并抑制远低于最大值的其他分量。

    下面是使用Python进行函数计算的示例代码:

    import math
    z = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]
    z_exp = [math.exp(i) for i in z]  
    print(z_exp)  # Result: [2.72, 7.39, 20.09, 54.6, 2.72, 7.39, 20.09] 
    sum_z_exp = sum(z_exp)  
    print(sum_z_exp)  # Result: 114.98 
    softmax = [round(i / sum_z_exp, 3) for i in z_exp]
    print(softmax)  # Result: [0.024, 0.064, 0.175, 0.475, 0.024, 0.064, 0.175]
    
    [2.718281828459045, 7.38905609893065, 20.085536923187668, 54.598150033144236, 2.718281828459045, 7.38905609893065, 20.085536923187668]
    114.98389973429897
    [0.024, 0.064, 0.175, 0.475, 0.024, 0.064, 0.175]
    

    Python使用numpy计算的示例代码:

    import numpy as np
    z = np.array([1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0])
    print(np.exp(z)/sum(np.exp(z)))
    
    [0.02364054 0.06426166 0.1746813  0.474833   0.02364054 0.06426166
     0.1746813 ]
  • 相关阅读:
    Java之lambda表达式
    修改IntelliJ IDEA的java编译版本
    no route to host解决方案、Failed to start LSB: Bring up/down networking的问题解决方案
    spark转换集合为RDD
    spark编写word count
    nexus
    spark 源码安装
    spark shell
    maven
    git
  • 原文地址:https://www.cnblogs.com/CheeseZH/p/9521971.html
Copyright © 2011-2022 走看看