最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TensorFlow損失函數(shù)專題詳解

 更新時間:2018年04月26日 10:25:23   作者:marsjhao  
本篇文章主要介紹了TensorFlow損失函數(shù)專題詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、分類問題損失函數(shù)——交叉熵(crossentropy)

交叉熵刻畫了兩個概率分布之間的距離,是分類問題中使用廣泛的損失函數(shù)。給定兩個概率分布p和q,交叉熵刻畫的是兩個概率分布之間的距離:

我們可以通過Softmax回歸將神經(jīng)網(wǎng)絡(luò)前向傳播得到的結(jié)果變成交叉熵要求的概率分布得分。在TensorFlow中,Softmax回歸的參數(shù)被去掉了,只是一個額外的處理層,將神經(jīng)網(wǎng)絡(luò)的輸出變成一個概率分布。

代碼實現(xiàn):

import tensorflow as tf 
 
y_ = tf.constant([[1.0, 0, 0]]) # 正確標(biāo)簽 
y1 = tf.constant([[0.9, 0.06, 0.04]]) # 預(yù)測結(jié)果1 
y2 = tf.constant([[0.5, 0.3, 0.2]]) # 預(yù)測結(jié)果2 
# 以下為未經(jīng)過Softmax處理的類別得分 
y3 = tf.constant([[10.0, 3.0, 2.0]]) 
y4 = tf.constant([[5.0, 3.0, 1.0]]) 
 
# 自定義交叉熵 
cross_entropy1 = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y1, 1e-10, 1.0))) 
cross_entropy2 = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y2, 1e-10, 1.0))) 
# TensorFlow提供的集成交叉熵 
# 注:該操作應(yīng)該施加在未經(jīng)過Softmax處理的logits上,否則會產(chǎn)生錯誤結(jié)果 
# labels為期望輸出,且必須采用labels=y_, logits=y的形式將參數(shù)傳入 
cross_entropy_v2_1 = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y3) 
cross_entropy_v2_2 = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y4) 
 
sess = tf.InteractiveSession() 
print('[[0.9, 0.06, 0.04]]:', cross_entropy1.eval()) 
print('[[0.5, 0.3, 0.2]]:', cross_entropy2.eval()) 
print('v2_1', cross_entropy_v2_1.eval()) 
print('v2_2',cross_entropy_v2_2.eval()) 
sess.close() 
 
''''' 
[[0.9, 0.06, 0.04]]: 0.0351202 
[[0.5, 0.3, 0.2]]: 0.231049 
v2_1 [ 0.00124651] 
v2_2 [ 0.1429317] 
''' 

tf.clip_by_value()函數(shù)可將一個tensor的元素數(shù)值限制在指定范圍內(nèi),這樣可防止一些錯誤運算,起到數(shù)值檢查作用。

* 乘法操作符是元素之間直接相乘,tensor中是每個元素對應(yīng)相乘,要去別去tf.matmul()函數(shù)的矩陣相乘。

tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y)是TensorFlow提供的集成交叉熵函數(shù)。該操作應(yīng)該施加在未經(jīng)過Softmax處理的logits上,否則會產(chǎn)生錯誤結(jié)果;labels為期望輸出,且必須采用labels=y_, logits=y3的形式將參數(shù)傳入。

二、回歸問題損失函數(shù)——均方誤差(MSE,mean squared error)

均方誤差亦可用于分類問題的損失函數(shù),其定義為:


三、自定義損失函數(shù)

對于理想的分類問題和回歸問題,可采用交叉熵或者MSE損失函數(shù),但是對于一些實際的問題,理想的損失函數(shù)可能在表達(dá)上不能完全表達(dá)損失情況,以至于影響對結(jié)果的優(yōu)化。例如:對于產(chǎn)品銷量預(yù)測問題,表面上是一個回歸問題,可使用MSE損失函數(shù)??蓪嶋H情況下,當(dāng)預(yù)測值大于實際值時,損失值應(yīng)是正比于商品成本的函數(shù);當(dāng)預(yù)測值小于實際值,損失值是正比于商品利潤的函數(shù),多數(shù)情況下商品成本和利潤是不對等的。自定義損失函數(shù)如下:

TensorFlow中,通過以下代碼實現(xiàn)loss= tf.reduce_sum(tf.where(tf.greater(y, y_), (y-y_)*loss_more,(y_-y)*loss_less))。

tf.greater(x,y),返回x>y的判斷結(jié)果的bool型tensor,當(dāng)tensor x, y的維度不一致時,采取廣播(broadcasting)機制。

tf.where(condition,x=None, y=None, name=None),根據(jù)condition選擇x (if true) or y (if false)。

代碼實現(xiàn):

import tensorflow as tf 
from numpy.random import RandomState 
 
batch_size = 8 
x = tf.placeholder(tf.float32, shape=(None, 2), name='x-input') 
y_ = tf.placeholder(tf.float32, shape=(None, 1), name='y-input') 
 
w1 = tf.Variable(tf.random_normal([2,1], stddev=1, seed=1)) 
y = tf.matmul(x, w1) 
 
# 根據(jù)實際情況自定義損失函數(shù) 
loss_less = 10 
loss_more = 1 
# tf.select()在1.0以后版本中已刪除,tf.where()替代 
loss = tf.reduce_sum(tf.where(tf.greater(y, y_), 
        (y-y_)*loss_more, (y_-y)*loss_less)) 
train_step = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss) 
 
rdm = RandomState(seed=1) # 定義一個隨機數(shù)生成器并設(shè)定隨機種子 
dataset_size = 128 
X = rdm.rand(dataset_size, 2) 
Y = [[x1 + x2 +rdm.rand()/10.0 - 0.05] for (x1, x2) in X] # 增加一個-0.05~0.05的噪聲 
 
sess = tf.InteractiveSession() 
tf.global_variables_initializer().run() 
for i in range(5000): 
 start = (i * batch_size) % dataset_size 
 end = min(start+batch_size, dataset_size) 
 train_step.run({x: X[start: end], y_: Y[start: end]}) 
 if i % 500 == 0: 
  print('step%d:\n' % i, w1.eval()) 
print('final w1:\n', w1.eval()) 
sess.close() 
 
''''' 
loss_less = 10 
loss_more = 1 
final w1: 
 [[ 1.01934695] 
 [ 1.04280889]] 
 
loss_less = 1 
loss_more = 10 
final w1: 
 [[ 0.95525807] 
 [ 0.9813394 ]] 
 
loss_less = 1 
loss_more = 1 
final w1: 
 [[ 0.9846065 ] 
 [ 1.01486754]] 
''' 

根據(jù)程序輸出可見,當(dāng)我們將loss_less=10時,表明我們對預(yù)測值過小表征的損失值更大,優(yōu)化得到的參數(shù)均略大于1;當(dāng)loss_more=10時,表明我們對預(yù)測值過大表征的損失值更大,優(yōu)化得到的參數(shù)均略小于1;當(dāng)兩者均設(shè)為1時,得到的參數(shù)約等于1。

四、TensorFlow的Cross_Entropy實現(xiàn)

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

該函數(shù)的功能是自動計算logits(未經(jīng)過Softmax)與labels之間的cross_entropy交叉熵。

該操作應(yīng)該施加在未經(jīng)過Softmax處理的logits上,否則會產(chǎn)生錯誤結(jié)果;labels為期望輸出,且必須采用labels=y_,logits=y3的形式將參數(shù)傳入。

第一個參數(shù)logits:就是神經(jīng)網(wǎng)絡(luò)最后一層的輸出,如果有batch的話,它的大小就是[batchsize,num_classes],單樣本的話,大小就是num_classes

第二個參數(shù)labels:實際的標(biāo)簽,大小同上。

注意:如果labels的每一行是one-hot表示,也就是只有一個地方為1,其他地方為0,可以使用tf.sparse_softmax_cross_entropy_with_logits()

警告: (1)這個操作的輸入logits是未經(jīng)縮放的,該操作內(nèi)部會對logits使用softmax操作;(2)參數(shù)labels,logits必須有相同的形狀 [batch_size, num_classes] 和相同的類型(float16, float32,float64)中的一種。

該函數(shù)具體的執(zhí)行過程分兩步:首先對logits做一個Softmax,

第二步就是將第一步的輸出與樣本的實際標(biāo)簽labels做一個交叉熵。

注意?。?!這個函數(shù)的返回值并不是一個數(shù),而是一個向量,如果要求交叉熵,我們要再做一步tf.reduce_sum操作,就是對向量里面所有元素求和,最后才得到交叉熵,如果求loss,則要做一步tf.reduce_mean操作,對向量求均值!

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

該函數(shù)與tf.nn.softmax_cross_entropy_with_logits(_sentinel=None,labels=None, logits=None, dim=-1, name=None)十分相似,唯一的區(qū)別在于labels,該函數(shù)的標(biāo)簽labels要求是排他性的即只有一個正確類別,labels的形狀要求是[batch_size] 而值必須是從0開始編碼的int32或int64,而且值范圍是[0, num_class),對比于tf.nn.softmax_cross_entropy_with_logits的[batchsize,num_classes]格式的得分編碼。

其他使用注意事項參見tf.nn.softmax_cross_entropy_with_logits的說明。

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

sigmoid_cross_entropy_with_logits是TensorFlow最早實現(xiàn)的交叉熵算法。這個函數(shù)的輸入是logits和labels,logits就是神經(jīng)網(wǎng)絡(luò)模型中的 W * X矩陣,注意不需要經(jīng)過sigmoid,而labels的shape和logits相同,就是正確的標(biāo)簽值,例如這個模型一次要判斷100張圖是否包含10種動物,這兩個輸入的shape都是[100, 10]。注釋中還提到這10個分類之間是獨立的、不要求是互斥,這種問題我們稱為多目標(biāo)(多標(biāo)簽)分類,例如判斷圖片中是否包含10種動物中的一種或幾種,標(biāo)簽值可以包含多個1或0個1。

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

weighted_sigmoid_cross_entropy_with_logits是sigmoid_cross_entropy_with_logits的拓展版,多支持一個pos_weight參數(shù),在傳統(tǒng)基于sigmoid的交叉熵算法上,正樣本算出的值乘以某個系數(shù)。

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

相關(guān)文章

  • python+playwright微軟自動化工具的使用

    python+playwright微軟自動化工具的使用

    這篇文章主要介紹了python+playwright微軟自動化工具的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python使用Selenium和cookie繞過驗證碼實現(xiàn)登錄示例代碼

    python使用Selenium和cookie繞過驗證碼實現(xiàn)登錄示例代碼

    文章介紹了如何使用Selenium獲取登錄過程中的cookie信息,并通過抓包工具獲取cookie,通過示例展示了如何在Dsmall和CRM系統(tǒng)中實現(xiàn)免登陸操作,總結(jié)了兩種方法:一種是在獲取到cookie后直接添加到當(dāng)前會話中,另一種是將cookie存儲到本地文件并在后續(xù)請求中使用
    2025-01-01
  • Python GUI布局尺寸適配方法

    Python GUI布局尺寸適配方法

    今天小編就為大家分享一篇Python GUI布局尺寸適配方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 使用Kivy將python程序打包為apk文件

    使用Kivy將python程序打包為apk文件

    本文給大家分享的是使用Kivy將python程序打包為apk文件的方法,包括安裝步驟及相關(guān)代碼,有需要的小伙伴可以參考下
    2017-07-07
  • TF-IDF算法解析與Python實現(xiàn)方法詳解

    TF-IDF算法解析與Python實現(xiàn)方法詳解

    這篇文章主要介紹了TF-IDF算法解析與Python實現(xiàn)方法詳解,文章介紹了tf-idf算法的主要思想,分享了Python實現(xiàn)tr-idf算法所必要的預(yù)處理過程,以及具體實現(xiàn)代碼等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • python 將字符串轉(zhuǎn)換成字典dict的各種方式總結(jié)

    python 將字符串轉(zhuǎn)換成字典dict的各種方式總結(jié)

    下面小編就為大家分享一篇python 將字符串轉(zhuǎn)換成字典dict的各種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Python Sphinx使用實例及問題解決

    Python Sphinx使用實例及問題解決

    這篇文章主要介紹了Python Sphinx使用實例及問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • python中pyplot直方圖的繪制方式

    python中pyplot直方圖的繪制方式

    這篇文章主要介紹了python中pyplot直方圖的繪制方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python對數(shù)組進行排序,并輸出排序后對應(yīng)的索引值方式

    python對數(shù)組進行排序,并輸出排序后對應(yīng)的索引值方式

    今天小編就為大家分享一篇python對數(shù)組進行排序,并輸出排序后對應(yīng)的索引值方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python實現(xiàn)歸并排序算法

    python實現(xiàn)歸并排序算法

    這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)歸并排序算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11

最新評論

尚义县| 长宁区| 额敏县| 大竹县| 桑植县| 息烽县| 堆龙德庆县| 墨竹工卡县| 苍南县| 福鼎市| 大宁县| 牙克石市| 廉江市| 那曲县| 福建省| 舟曲县| 光山县| 剑河县| 沽源县| 武夷山市| 江永县| 广德县| 武宣县| 石阡县| 临沧市| 潞城市| 安徽省| 马鞍山市| 灌南县| 台州市| 微山县| 怀宁县| 静安区| 万州区| 永春县| 张家界市| 汪清县| 汝阳县| 苍梧县| 饶平县| 望谟县|