机器学习(六)Sigmoid函数和Softmax函数

作者: 致Great | 来源:发表于2017-09-20 16:54 被阅读3184次

    1 Sigmoid函数

    1.1 定义

    Sigmoid函数是一个在生物学中常见的S型的函数,也称为S型生长曲线。Sigmoid函数常被用作神经网络的阈值函数,将变量映射到0,1之间。

    1.2公式


    其对x的导数可以用自身表示:


    1.2 python实现

    import numpy as np
    import matplotlib.pyplot as plt
    def sigmoid(x):
        return 1.0/(1+np.exp(-x))
    

    1.3 函数图像

    import numpy as np
    import matplotlib.pyplot as plt
    def sigmoid(x):
        return 1.0/(1+np.exp(-x))
    
    sigmoid_inputs = np.arange(-10,10)
    sigmoid_outputs=sigmoid(sigmoid(sigmoid_inputs))
    print("Sigmoid Function Input :: {}".format(sigmoid_inputs))
    print("Sigmoid Function Output :: {}".format(sigmoid_outputs))
    
    plt.plot(sigmoid_inputs,sigmoid_outputs)
    plt.xlabel("Sigmoid Inputs")
    plt.ylabel("Sigmoid Outputs")
    plt.show()
    

    2 Softmax函数

    2.1 定义

    在数学,尤其是概率论和相关领域中,Softmax函数,或称归一化指数函数
    ,是逻辑函数的一种推广。它能将一个含任意实数的K维的向量z的“压缩”到另一个K维实向量σ(z) 中,使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。

    2.2公式


    在多项逻辑回归和线性判别分析中,函数的输入是从K个不同的线性函数得到的结果,而样本向量 x 属于第 j 个分类的概率为:

    这可以被视作K个线性函数x→xTw1,...,→xTwKSoftmax函数的复合(xTwxw)

    2.3 python实现

    import numpy as np
    
    def softmax(x):
        orig_shape=x.shape
        if len(x.shape)>1:
            #Matrix
            #shift max whithin each row
            constant_shift=np.max(x,axis=1).reshape(1,-1)
            x-=constant_shift
            x=np.exp(x)
            normlize=np.sum(x,axis=1).reshape(1,-1)
            x/=normlize
        else:
            #vector
            constant_shift=np.max(x)
            x-=constant_shift
            x=np.exp(x)
            normlize=np.sum(x)
            x/=normlize
        assert x.shape==orig_shape
        return x
    

    2.4 函数图像

    def softmax(x):
        orig_shape=x.shape
        if len(x.shape)>1:
            #Matrix
            #shift max whithin each row
            constant_shift=np.max(x,axis=1).reshape(1,-1)
            x-=constant_shift
            x=np.exp(x)
            normlize=np.sum(x,axis=1).reshape(1,-1)
            x/=normlize
        else:
            #vector
            constant_shift=np.max(x)
            x-=constant_shift
            x=np.exp(x)
            normlize=np.sum(x)
            x/=normlize
        assert x.shape==orig_shape
        return x
    
    softmax_inputs = np.arange(-10,10)
    softmax_outputs=softmax(softmax_inputs)
    print("Sigmoid Function Input :: {}".format(softmax_inputs))
    print("Sigmoid Function Output :: {}".format(softmax_outputs))
    # 画图像
    plt.plot(softmax_inputs,softmax_outputs)
    plt.xlabel("Softmax Inputs")
    plt.ylabel("Softmax Outputs")
    plt.show()
    

    推荐阅读

    相关文章

      网友评论

        本文标题:机器学习(六)Sigmoid函数和Softmax函数

        本文链接:https://www.haomeiwen.com/subject/rhmosxtx.html