成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python - softmax 實(shí)現(xiàn)

史占廣 / 948人閱讀

摘要:函數(shù)將任意維的實(shí)值向量轉(zhuǎn)換為取值范圍在之間的維實(shí)值向量,并且總和為。將原始輸入映射到區(qū)間,并且總和為,常用于表征概率。這個(gè)性質(zhì)用于保證數(shù)值的穩(wěn)定性。當(dāng)輸入一個(gè)較大的數(shù)值時(shí),函數(shù)將會(huì)超出限制,導(dǎo)致出錯(cuò)。

Softmax

softmax函數(shù)將任意n維的實(shí)值向量轉(zhuǎn)換為取值范圍在(0,1)之間的n維實(shí)值向量,并且總和為1。
例如:向量softmax([1.0, 2.0, 3.0]) ------> [0.09003057, 0.24472847, 0.66524096]

性質(zhì):

因?yàn)閟oftmax是單調(diào)遞增函數(shù),因此不改變?cè)紨?shù)據(jù)的大小順序。

將原始輸入映射到(0,1)區(qū)間,并且總和為1,常用于表征概率。

softmax(x) = softmax(x+c), 這個(gè)性質(zhì)用于保證數(shù)值的穩(wěn)定性。

softmax的實(shí)現(xiàn)及數(shù)值穩(wěn)定性

一個(gè)最簡(jiǎn)單的計(jì)算給定向量的softmax的實(shí)現(xiàn)如下:

import numpy as np
def softmax(x):
"""Compute the softmax of vector x."""
    exp_x = np.exp(x)
    softmax_x = exp_x / np.sum(exp_x)
    return softmax_x 

讓我們來測(cè)試一下上面的代碼:

softmax([1, 2, 3])
array([0.09003057, 0.24472847, 0.66524096])

但是,當(dāng)我們嘗試輸入一個(gè)比較大的數(shù)值向量時(shí),就會(huì)出錯(cuò):

softmax([1000, 2000, 3000])
array([nan, nan, nan])

這是由numpy中的浮點(diǎn)型數(shù)值范圍限制所導(dǎo)致的。當(dāng)輸入一個(gè)較大的數(shù)值時(shí),sofmax函數(shù)將會(huì)超出限制,導(dǎo)致出錯(cuò)。
為了解決這一問題,這時(shí)我們就能用到sofmax的第三個(gè)性質(zhì),即:softmax(x) = softmax(x+c),
一般在實(shí)際運(yùn)用中,通常設(shè)定c = - max(x)。
接下來,我們重新定義softmax函數(shù):

import numpy as np
def softmax(x):
"""Compute the softmax in a numerically stable way."""
    x = x - np.max(x)
    exp_x = np.exp(x)
    softmax_x = exp_x / np.sum(exp_x)
    return softmax_x

然后再次測(cè)試一下:

softmax([1000, 2000, 3000])
array([ 0.,  0.,  1.])

Done!

以上都是基于向量上的softmax實(shí)現(xiàn),下面提供了基于向量以及矩陣的softmax實(shí)現(xiàn),代碼如下:

import numpy as np
def softmax(x):
    """
    Compute the softmax function for each row of the input x.

    Arguments:
    x -- A N dimensional vector or M x N dimensional numpy matrix.

    Return:
    x -- You are allowed to modify x in-place
    """
    orig_shape = x.shape

    if len(x.shape) > 1:
        # Matrix
        exp_minmax = lambda x: np.exp(x - np.max(x))
        denom = lambda x: 1.0 / np.sum(x)
        x = np.apply_along_axis(exp_minmax,1,x)
        denominator = np.apply_along_axis(denom,1,x) 
        
        if len(denominator.shape) == 1:
            denominator = denominator.reshape((denominator.shape[0],1))
        
        x = x * denominator
    else:
        # Vector
        x_max = np.max(x)
        x = x - x_max
        numerator = np.exp(x)
        denominator =  1.0 / np.sum(numerator)
        x = numerator.dot(denominator)
    
    assert x.shape == orig_shape
    return x

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38689.html

相關(guān)文章

  • mnist 機(jī)器學(xué)習(xí)入門筆記(一) 學(xué)習(xí)softmax模型

    摘要:首先需要添加一個(gè)新的占位符用于輸入正確值計(jì)算交叉熵的表達(dá)式可以實(shí)現(xiàn)為現(xiàn)在我們知道我們需要我們的模型做什么啦,用來訓(xùn)練它是非常容易的。 學(xué)習(xí)softmax回歸模型 一. 下載mnist數(shù)據(jù)集 新建一個(gè)download.py 代碼如下: Functions for downloading and reading MNIST data. from __future__ import abso...

    shengguo 評(píng)論0 收藏0
  • 使用 LSTM 智能作詩(shī)送新年祝福

    摘要:經(jīng)過第一步的處理已經(jīng)把古詩(shī)詞詞語轉(zhuǎn)換為可以機(jī)器學(xué)習(xí)建模的數(shù)字形式,因?yàn)槲覀儾捎盟惴ㄟM(jìn)行古詩(shī)詞生成,所以還需要構(gòu)建輸入到輸出的映射處理。 LSTM 介紹 序列化數(shù)據(jù)即每個(gè)樣本和它之前的樣本存在關(guān)聯(lián),前一數(shù)據(jù)和后一個(gè)數(shù)據(jù)有順序關(guān)系。深度學(xué)習(xí)中有一個(gè)重要的分支是專門用來處理這樣的數(shù)據(jù)的——循環(huán)神經(jīng)網(wǎng)絡(luò)。循環(huán)神經(jīng)網(wǎng)絡(luò)廣泛應(yīng)用在自然語言處理領(lǐng)域(NLP),今天我們帶你從一個(gè)實(shí)際的例子出發(fā),介紹循...

    lauren_liuling 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

史占廣

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<