python求熵函數(shù) 熵函數(shù)計(jì)算

交叉熵?fù)p失函數(shù)是什么?

平滑函數(shù)。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到城中網(wǎng)站設(shè)計(jì)與城中網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋城中地區(qū)。

交叉熵?fù)p失函數(shù),也稱為對(duì)數(shù)損失或者logistic損失。當(dāng)模型產(chǎn)生了預(yù)測(cè)值之后,將對(duì)類(lèi)別的預(yù)測(cè)概率與真實(shí)值(由0或1組成)進(jìn)行不比較,計(jì)算所產(chǎn)生的損失,然后基于此損失設(shè)置對(duì)數(shù)形式的懲罰項(xiàng)。

在神經(jīng)網(wǎng)絡(luò)中,所使用的Softmax函數(shù)是連續(xù)可導(dǎo)函數(shù),這使得可以計(jì)算出損失函數(shù)相對(duì)于神經(jīng)網(wǎng)絡(luò)中每個(gè)權(quán)重的導(dǎo)數(shù)(在《機(jī)器學(xué)習(xí)數(shù)學(xué)基礎(chǔ)》中有對(duì)此的完整推導(dǎo)過(guò)程和案例,這樣就可以相應(yīng)地調(diào)整模型的權(quán)重以最小化損失函數(shù)。

擴(kuò)展資料:

注意事項(xiàng):

當(dāng)預(yù)測(cè)類(lèi)別為二分類(lèi)時(shí),交叉熵?fù)p失函數(shù)的計(jì)算公式如下圖,其中y是真實(shí)類(lèi)別(值為0或1),p是預(yù)測(cè)類(lèi)別的概率(值為0~1之間的小數(shù))。

計(jì)算二分類(lèi)的交叉熵?fù)p失函數(shù)的python代碼如下圖,其中esp是一個(gè)極小值,第五行代碼clip的目的是保證預(yù)測(cè)概率的值在0~1之間,輸出的損失值數(shù)組求和后,就是損失函數(shù)最后的返回值。

參考資料來(lái)源:百度百科-交叉熵

參考資料來(lái)源:百度百科-損失函數(shù)

提取HSV顏色特征,并計(jì)算維數(shù)的熵,最后保存特征和熵,形式:圖像名、特征和熵,用python實(shí)現(xiàn),怎么實(shí)現(xiàn)

可以使用Python版的opencv 來(lái)實(shí)現(xiàn)。

現(xiàn)讀取圖片:

import?cv2

import?numpy?as?np

from?matplotlib?import?pyplot?as?plt

image=cv2.imread('./src/q5.png')

HSV=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)

計(jì)算熵

img?=?np.array(HSV)

for?i?in?range(len(img)):

for?j?in?range(len(img[i])):

val?=?img[i][j]

tmp[val]?=?float(tmp[val]?+?1)

k?=??float(k?+?1)

for?i?in?range(len(tmp)):

tmp[i]?=?float(tmp[i]?/?k)

for?i?in?range(len(tmp)):

if(tmp[i]?==?0):

res?=?res

else:

res?=?float(res?-?tmp[i]?*?(math.log(tmp[i])?/?math.log(2.0)))

保存:

HSV圖形可以直接存儲(chǔ),特征可以存xml中~

cv2.imwrite("具體路徑",HSV)

求python 熵值法實(shí)現(xiàn)代碼

一、基本原理

在信息論中,熵是對(duì)不確定性的一種度量。信息量越大,不確定性就越小,熵也就越??;信息量越小,不確定性越大,熵也越大。

根據(jù)熵的特性,可以通過(guò)計(jì)算熵值來(lái)判斷一個(gè)事件的隨機(jī)性及無(wú)序程度,也可以用熵值來(lái)判斷某個(gè)指標(biāo)的離散程度,指標(biāo)的離散程度越大,該指標(biāo)對(duì)綜合評(píng)價(jià)的影響(權(quán)重)越大,其熵值越小。

二、熵值法步驟

1. 選取n個(gè)國(guó)家,m個(gè)指標(biāo),則為第i個(gè)國(guó)家的第j個(gè)指標(biāo)的數(shù)值(i=1, 2…, n; j=1,2,…, m);

2. 指標(biāo)的歸一化處理:異質(zhì)指標(biāo)同質(zhì)化

由于各項(xiàng)指標(biāo)的計(jì)量單位并不統(tǒng)一,因此在用它們計(jì)算綜合指標(biāo)前,先要對(duì)它們進(jìn)行標(biāo)準(zhǔn)化處理,即把指標(biāo)的絕對(duì)值轉(zhuǎn)化為相對(duì)值,并令,從而解決各項(xiàng)不同質(zhì)指標(biāo)值的同質(zhì)化問(wèn)題。而且,由于正向指標(biāo)和負(fù)向指標(biāo)數(shù)值代表的含義不同(正向指標(biāo)數(shù)值越高越好,負(fù)向指標(biāo)數(shù)值越低越好),因此,對(duì)于高低指標(biāo)我們用不同的算法進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理。其具體方法如下:

正向指標(biāo):

負(fù)向指標(biāo):

則為第i個(gè)國(guó)家的第j個(gè)指標(biāo)的數(shù)值(i=1, 2…, n; j=1, 2,…, m)。為了方便起見(jiàn),歸一化后的數(shù)據(jù)仍記為;

3. 計(jì)算第j項(xiàng)指標(biāo)下第i個(gè)國(guó)家占該指標(biāo)的比重:

4. 計(jì)算第j項(xiàng)指標(biāo)的熵值:

其中. 滿足;

5. 計(jì)算信息熵冗余度:

6. 計(jì)算各項(xiàng)指標(biāo)的權(quán)值:

7. 計(jì)算各國(guó)家的綜合得分:

[code]function [s,w]=shang(x)

% 函數(shù)shang.m, 實(shí)現(xiàn)用熵值法求各指標(biāo)(列)的權(quán)重及各數(shù)據(jù)行的得分

% x為原始數(shù)據(jù)矩陣, 一行代表一個(gè)國(guó)家, 每列對(duì)應(yīng)一個(gè)指標(biāo)

% s返回各行得分, w返回各列權(quán)重

[n,m]=size(x); % n=23個(gè)國(guó)家, m=5個(gè)指標(biāo)

%% 數(shù)據(jù)的歸一化處理

% Matlab2010b,2011a,b版本都有bug,需如下處理. 其它版本直接用[X,ps]=mapminmax(x',0,1);即可

[X,ps]=mapminmax(x');

ps.ymin=0.002; % 歸一化后的最小值

ps.ymax=0.996; % 歸一化后的最大值

ps.yrange=ps.ymax-ps.ymin; % 歸一化后的極差,若不調(diào)整該值, 則逆運(yùn)算會(huì)出錯(cuò)

X=mapminmax(x',ps);

% mapminmax('reverse',xx,ps); % 反歸一化, 回到原數(shù)據(jù)

X=X'; % X為歸一化后的數(shù)據(jù), 23行(國(guó)家), 5列(指標(biāo))

%% 計(jì)算第j個(gè)指標(biāo)下,第i個(gè)記錄占該指標(biāo)的比重p(i,j)

for i=1:n

for j=1:m

p(i,j)=X(i,j)/sum(X(:,j));

end

end

%% 計(jì)算第j個(gè)指標(biāo)的熵值e(j)

k=1/log(n);

for j=1:m

e(j)=-k*sum(p(:,j).*log(p(:,j)));

end

d=ones(1,m)-e; % 計(jì)算信息熵冗余度

w=d./sum(d); % 求權(quán)值w

s=w*p'; % 求綜合得分[\code]

測(cè)試程序:

data.txt 數(shù)據(jù)如下:

114.6 1.1 0.71 85.0 346

55.3 0.96 0.4 69.0 300

132.4 0.97 0.54 73.0 410

152.1 1.04 0.49 77.0 433

103.5 0.96 0.66 67.0 385

81.0 1.08 0.54 96.0 336

179.3 0.88 0.59 89.0 446

29.8 0.83 0.49 120.0 289

92.7 1.15 0.44 154.0 300

248.6 0.79 0.5 147.0 483

115.0 0.74 0.65 252.0 453

64.9 0.59 0.5 167.0 402

163.6 0.85 0.58 220.0 495

95.7 1.02 0.48 160.0 384

139.5 0.70 0.59 217.0 478

89.9 0.96 0.39 105.0 314

76.7 0.95 0.51 162.0 341

121.8 0.83 0.60 140.0 401

42.1 1.08 0.47 110.0 326

78.5 0.89 0.44 94.0 280

77.8 1.19 0.57 91.0 364

90.0 0.95 0.43 89.0 301

100.6 0.82 0.59 83.0 456

執(zhí)行代碼:

[code]x=load('data.txt'); % 讀入數(shù)據(jù)

[s,w]=shang(x)[\code]

運(yùn)行結(jié)果:

s =

Columns 1 through 9

0.0431 0.0103 0.0371 0.0404 0.0369 0.0322 0.0507 0.0229 0.0397

Columns 10 through 18

0.0693 0.0878 0.0466 0.0860 0.0503 0.0800 0.0234 0.0456 0.0536

Columns 19 through 23

0.0272 0.0181 0.0364 0.0202 0.0420

w =

0.1660 0.0981 0.1757 0.3348 0.2254

熵的求法

熵是個(gè)狀態(tài)函數(shù),代表系統(tǒng)此時(shí)所處的狀態(tài)是否穩(wěn)定,是否容易改變,向哪個(gè)方向改變。如一個(gè)系統(tǒng)的熱力學(xué)溫度為T(mén),加進(jìn)熱量△Q,則熵的增加為:△S=△Q/△T。若△S>0,則過(guò)程是可能的;若△S<0,則是不可能的。

希望能幫到您。

提取顏色特征并計(jì)算熵,使用python實(shí)現(xiàn)

正好學(xué)到這,練下手。比較晚了,所以寫(xiě)的比較簡(jiǎn)單,不明白了明天再說(shuō)

Tensorflow四種交叉熵函數(shù)計(jì)算公式

轉(zhuǎn)自:

注意 :tensorflow交叉熵計(jì)算函數(shù)輸入中的logits都不是softmax或sigmoid的 輸出 ,而是softmax或sigmoid函數(shù)的 輸入 ,因?yàn)樗?函數(shù)內(nèi)部進(jìn)行sigmoid或softmax操作

tf.nn.sigmoid_cross_entropy_with_logits(_sentinel=None,labels=None, logits=None, name=None)

參數(shù): ?? _sentinel:本質(zhì)上是不用的參數(shù),不用填

? ? ?? logits:一個(gè)數(shù)據(jù)類(lèi)型(type)是float32或float64;

? ? ?? shape:[batch_size,num_classes],單樣本是[num_classes]

? ? ?? labels:和logits具有相同的type(float)和shape的張量(tensor),

? ? ?? name:操作的名字,可填可不填

輸出:

? ? ?? loss,shape:[batch_size,num_classes]

Note: 它對(duì)于輸入的logits先通過(guò)sigmoid函數(shù)計(jì)算,再計(jì)算它們的交叉熵,但是它對(duì)交叉熵的計(jì)算方式進(jìn)行了優(yōu)化,使得結(jié)果不至于溢出。它適用于每個(gè)類(lèi)別相互獨(dú)立但互不排斥的情況:例如一幅圖可以同時(shí)包含一條狗和一只大象。output不是一個(gè)數(shù),而是一個(gè)batch中每個(gè)樣本的loss,所以一般配合tf.reduce_mea(loss)使用

計(jì)算公式:

Python 程序:

輸出的E1,E2結(jié)果相同

tf.nn.softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, dim=-1, name=None)argument:

_sentinel: 本質(zhì)上是不用的參數(shù),不用填

logits:一個(gè)數(shù)據(jù)類(lèi)型(type)是float32或float64;

shape :[batch_size,num_classes]

labels:和logits具有相同type和shape的張量(tensor),,是一個(gè)有效的概率,sum(labels)=1, one_hot=True(向量中只有一個(gè)值為1.0,其他值為0.0)

name:操作的名字,可填可不填

output: loss,shape:[batch_size]

Note: 它對(duì)于輸入的logits先通過(guò)softmax( 不同于sigmoid )函數(shù)計(jì)算,再計(jì)算它們的交叉熵,但是它對(duì)交叉熵的計(jì)算方式進(jìn)行了優(yōu)化,使得結(jié)果不至于溢出。它適用于每個(gè)類(lèi)別相互獨(dú)立且排斥的情況,一幅圖只能屬于一類(lèi),而不能同時(shí)包含一條狗和一只大象。output不是一個(gè)數(shù),而是一個(gè)batch中每個(gè)樣本的loss,所以一般配合tf.reduce_mean(loss)使用。

計(jì)算公式:

Python程序:

import tensorflow as tf

import numpy as np

def softmax(x):

sum_raw = np.sum(np.exp(x),axis=-1)

x1 = np.ones(np.shape(x))

for i in range(np.shape(x)[0]):

? ? x1[i] = np.exp(x[i])/sum_raw[i]

return x1

y = np.array([[1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,1,0]])#每一行只有一個(gè)1

logits =np.array([[12,3,2],[3,10,1],[1,2,5],[4,6.5,1.2],[3,6,1]])

y_pred =softmax(logits)

E1 = -np.sum(y*np.log(y_pred),-1)

print(E1)

sess = tf.Session()

y = np.array(y).astype(np.float64)

E2 = sess.run(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=logits))

print(E2)

輸出的E1,E2結(jié)果相同

tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None,labels=None,logits=None, name=None)

argument:

_sentinel:本質(zhì)上是不用的參數(shù),不用填

logits:一個(gè)數(shù)據(jù)類(lèi)型(type)是float32或float64;

shape:[batch_size,num_classes]

labels: shape為[batch_size],labels[i]是{0,1,2,……,num_classes-1}的一個(gè)索引, type為int32或int64

name:操作的名字,可填可不填

output:

loss,shape:[batch_size]

Note:它對(duì)于輸入的logits先通過(guò)softmax函數(shù)計(jì)算,再計(jì)算它們的交叉熵,但是它對(duì)交叉熵的計(jì)算方式進(jìn)行了優(yōu)化,使得結(jié)果不至于溢出

它適用于每個(gè)類(lèi)別相互獨(dú)立且排斥的情況,一幅圖只能屬于一類(lèi),而不能同時(shí)包含一條狗和一只大象

output不是一個(gè)數(shù),而是一個(gè)batch中每個(gè)樣本的loss,所以一般配合tf.reduce_mean(loss)使用

計(jì)算公式:

和tf.nn.softmax_cross_entropy_with_logits()一樣,只是要將labels轉(zhuǎn)換成tf.nn.softmax_cross_entropy_with_logits()中l(wèi)abels的形式

tf.nn.weighted_cross_entropy_with_logits(labels,logits, pos_weight, name=None)

計(jì)算具有權(quán)重的sigmoid交叉熵sigmoid_cross_entropy_with_logits()

argument:

_sentinel:本質(zhì)上是不用的參數(shù),不用填

logits:一個(gè)數(shù)據(jù)類(lèi)型(type)是float32或float64;

shape:[batch_size,num_classes],單樣本是[num_classes]

labels:和logits具有相同的type(float)和shape的張量(tensor),

pos_weight:正樣本的一個(gè)系數(shù)

name:操作的名字,可填可不填

output:

loss,shape:[batch_size,num_classes]

計(jì)算公式:

網(wǎng)站題目:python求熵函數(shù) 熵函數(shù)計(jì)算
網(wǎng)頁(yè)路徑:http://www.muchs.cn/article22/hggcjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、定制開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化靜態(tài)網(wǎng)站、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)