日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习:分类器介绍

發(fā)布時(shí)間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习:分类器介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

文章目錄

  • 目錄
  • 一 softmax 簡(jiǎn)介
  • 二 cross_entropy
  • 三 tensorflow中計(jì)算cross_entropy的方式
    • (1)自己使用公式計(jì)算
    • (2)Softmax交叉熵,label使用one_hot編碼
    • (3)Softmax交叉熵,labels不使用one_hot編碼
    • (4)sigmoid交叉熵,激活函數(shù)使用sigmoid

一 softmax 簡(jiǎn)介

計(jì)算loss時(shí),預(yù)測(cè)值要與真實(shí)值分布在相同的數(shù)據(jù)區(qū)間內(nèi),例如真實(shí)值在[0,1]區(qū)間內(nèi),那么神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)值最好也要在相同的區(qū)間(0,1)內(nèi);這樣在計(jì)算loss是才會(huì)有較好的效果。

在做二分類時(shí),可在網(wǎng)絡(luò)的輸出層使用激活函數(shù)sigmoid(),將輸出壓縮在(0,1)區(qū)間,

softmax可看做是對(duì)sigmoid的擴(kuò)展,是用于多分類的激活函數(shù),softmax就是將網(wǎng)絡(luò)的輸出轉(zhuǎn)化成對(duì)應(yīng)類別的概率值;

二 cross_entropy

交叉熵(KL散度)是統(tǒng)計(jì)學(xué)中兩個(gè)數(shù)據(jù)分布差異的一直度量;

其中p(x)是labels,q(x)是logits

三 tensorflow中計(jì)算cross_entropy的方式

目前主流的深度學(xué)習(xí)開發(fā)框架為Tensorflow,這一節(jié)將對(duì)如何在tensorflow中使用上述方法作一個(gè)簡(jiǎn)短的介紹。

(1)自己使用公式計(jì)算

soft_max = tf.nn.softmax(logits)

cross_entropy = -tf.reduce_sum(labels*tf.log(soft_max),1)

loss = tf.reduce_mean(cross_entropy)

上面,cross_entropy是一個(gè)shape是[batch_size]的tensor,而loss是shape是1的數(shù)值,需要使用tf.reduce_sum()或者tf.reduce_mean()計(jì)算當(dāng)前batch_size的總交叉熵loss,或者平均交叉熵loss;

或者不指定tf.reduce_sum()的axis,直接求當(dāng)前batch的交叉熵總和作為loss

soft_max = tf.nn.softmax(logits)

loss = -tf.reduce_sum(labels*tf.log(soft_max))

tips:tf.reduce_sum()默認(rèn)是計(jì)算輸入tensor的總和,指定axis時(shí),會(huì)按照指定的軸進(jìn)行求和;

(2)Softmax交叉熵,label使用one_hot編碼

使用tf.nn.softmax_cross_entropy_with_logits(logits,onehot_labels,name=None)

適用于每個(gè)類別獨(dú)立并且相互排斥,也就是每張圖片自能屬于一種類別

輸入:logits和labels必須具有相同的shape,和dtype。labels必須是one-hot編碼形式。

輸出:shape=[batch_size]的交叉熵cross_entropy

此函數(shù)會(huì)做兩件事:

對(duì)網(wǎng)絡(luò)輸出使用softmax,轉(zhuǎn)化成總和為1,對(duì)應(yīng)于各個(gè)類別的概率值 使用交叉熵公式計(jì)算cross_entropy,此時(shí)cross_entropy是shape=[batch_size],可以認(rèn)為是batch中每個(gè)圖片的交叉熵的值;

同時(shí)要注意與tf.losses.softmax_cross_entropy(logits,onehot_labels)的區(qū)別, tf.losses.softmax_cross_entropy()返回的是平均交叉熵的值,相當(dāng)于在tf.nn.softmax_cross_entropy_with_logits()后加上tf.reduce_mean()對(duì)交叉熵求平均,

此函數(shù)會(huì)做三件事:

對(duì)網(wǎng)絡(luò)輸出使用softmax,轉(zhuǎn)化成總和為1,對(duì)應(yīng)于各個(gè)類別的概率值 使用交叉熵公式計(jì)算cross_entropy,此時(shí)cross_entropy是shape=[batch_size],可以認(rèn)為是batch中每個(gè)圖片的交叉熵的值; 使用tf.reduce_mean(cross_entropy)計(jì)算平均交叉熵

(3)Softmax交叉熵,labels不使用one_hot編碼

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

適用于每個(gè)類別獨(dú)立并且相互排斥

輸入:logits[batch_size,num_classes],label是從0開始代表類別的整形數(shù)組,必須是非one-hot編碼

輸入:shape=[batch_size]的交叉熵cross_entropy

tf.losses.sparse_softmax_cross_entropy()也是相當(dāng)于在tf.nn.sparse_softmax_cross_entropy_with_logits后加上tf.reduce_mean對(duì)列表求均值;

(4)sigmoid交叉熵,激活函數(shù)使用sigmoid

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

適用于每個(gè)類別相互獨(dú)立,并且不相互排斥,也就是說每個(gè)圖片可以屬于多個(gè)類別;

輸入:logits,labels 必須具有相同的shape和type

輸出:shape=[batch_size,num_classes]當(dāng)前batch中網(wǎng)絡(luò)輸出節(jié)點(diǎn)每個(gè)節(jié)點(diǎn)的cross_entropy

用sigmoid做分類原本只能用于二分類,例如,網(wǎng)絡(luò)輸出節(jié)點(diǎn)1個(gè),使用sigmoid函數(shù)將網(wǎng)絡(luò)輸出壓縮至(0,1)范圍內(nèi),用0和1代表兩個(gè)類別;

將sigmoid擴(kuò)展至多分類,例如假設(shè)num_classes=10,對(duì)一張圖片中包含的數(shù)字(0~9)做分類(一張圖片可能包含多種數(shù)字),標(biāo)簽label可能是(1,0,1,1,0,0,1,0,1,0)(圖片包含0,2,3,6,8,數(shù)字),那么將網(wǎng)絡(luò)的輸出節(jié)點(diǎn)設(shè)置為10,對(duì)于每個(gè)節(jié)點(diǎn)使用都sigmoid激活函數(shù)來做二分類,判斷是/不是當(dāng)前類別;如第一個(gè)輸出節(jié)點(diǎn)判別是否包含數(shù)字1,第二個(gè)判別是否包含數(shù)字2…

loss使用交叉熵cross_entropy=-labels(tf.log(sigmoid(logits)))-(1-labels(tf.log(1-sigmoid(logits))))

或者使用tf.nn.sigmoid_cross_entropy_with_logits(logits,labels,name=None)

loss = tf.reduce_mean(cross_entropy)

或者使用tf.losses.sigmoid_cross_entropy()直接求平均交叉熵loss。

tips:softmax激活函數(shù)會(huì)使用所用的輸出節(jié)點(diǎn)一起來計(jì)算屬于每個(gè)類別的概率,而sigmoid激活函數(shù)只針對(duì)當(dāng)前節(jié)點(diǎn),返回包含當(dāng)前節(jié)點(diǎn)類別的概率,

此函數(shù)會(huì)做兩件事:

對(duì)網(wǎng)絡(luò)輸出使用sigmoid, 使用交叉熵公式計(jì)算cross_entropy

總結(jié)

以上是生活随笔為你收集整理的机器学习:分类器介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。