欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Softmax函數(shù)原理及Python實(shí)現(xiàn)過程解析

 更新時(shí)間:2020年05月22日 15:52:19   作者:April15  
這篇文章主要介紹了Softmax函數(shù)原理及Python實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Softmax原理

Softmax函數(shù)用于將分類結(jié)果歸一化,形成一個(gè)概率分布。作用類似于二分類中的Sigmoid函數(shù)。

對(duì)于一個(gè)k維向量z,我們想把這個(gè)結(jié)果轉(zhuǎn)換為一個(gè)k個(gè)類別的概率分布p(z)。softmax可以用于實(shí)現(xiàn)上述結(jié)果,具體計(jì)算公式為:

對(duì)于k維向量z來說,其中zi∈R,我們使用指數(shù)函數(shù)變換可以將元素的取值范圍變換到(0,+∞),之后我們?cè)偎性厍蠛蛯⒔Y(jié)果縮放到[0,1],形成概率分布。

常見的其他歸一化方法,如max-min、z-score方法并不能保證各個(gè)元素為正,且和為1。

Softmax性質(zhì)

輸入向量x加上一個(gè)常數(shù)c后求softmax結(jié)算結(jié)果不變,即:


我們使用softmax(x)的第i個(gè)元素的計(jì)算來進(jìn)行證明:

函數(shù)實(shí)現(xiàn)

由于指數(shù)函數(shù)的放大作用過于明顯,如果直接使用softmax計(jì)算公式

進(jìn)行函數(shù)實(shí)現(xiàn),容易導(dǎo)致數(shù)據(jù)溢出(上溢)。所以我們?cè)诤瘮?shù)實(shí)現(xiàn)時(shí)利用其性質(zhì):先對(duì)輸入數(shù)據(jù)進(jìn)行處理,之后再利用計(jì)算公式計(jì)算。具體使得實(shí)現(xiàn)步驟為:

  • 查找每個(gè)向量x的最大值c;
  • 每個(gè)向量減去其最大值c, 得到向量y = x-c;
  • 利用公式進(jìn)行計(jì)算,softmax(x) = softmax(x-c) = softmax(y)

代碼如下:

import numpy as np

def softmax(x):
  """
  softmax函數(shù)實(shí)現(xiàn)
  參數(shù):
  x --- 一個(gè)二維矩陣, m * n,其中m表示向量個(gè)數(shù),n表示向量維度
  返回:
  softmax計(jì)算結(jié)果
  """
  assert(len(X.shape) == 2)
  row_max = np.max(X, axis=axis).reshape(-1, 1)
  X -= row_max
  X_exp = np.exp(X)
  s = X_exp / np.sum(X_exp, axis=axis, keepdims=True)

  return s

測(cè)試一下:

a = [[1,2,3],[-1,-2,-3]]
b = [[1,2,3]]
c = [1,2,3]
a = np.array(a)
b = np.array(b)
c = np.array(c)

print(softmax(a))
print(softmax(b))
print(softmax(c)) # error

輸出結(jié)果為:

[[ 0.09003057 0.24472847 0.66524096]
[ 0.66524096 0.24472847 0.09003057]]
[[ 0.09003057 0.24472847 0.66524096]]
Traceback (most recent call last):
assert(len(X.shape) == 2)
AssertionError

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論