TensorFlow裡面損失函式

2022-07-17 04:18:10 字數 2073 閱讀 1581

損失函式的選取取決於輸入標籤資料的型別:

在tensorflow沒有單獨的mse函式,不過由於公式比較簡單,往往開發者都會自己組合,而且也可以寫出n種寫法,例如:

mse=tf.reduce_mean(tf.pow(tf.sub(logits, outputs), 2.0))

mse=tf.reduce_mean(tf.square(tf.sub(logits, outputs)))

mse=tf.reduce_mean(tf.square(logits- outputs))

**中logits代表標籤值,outputs代表**值

交叉熵(crossentropy)也是loss演算法的一種,一般用在分類問題上,表達的意識為**輸入樣本屬於某一類的概率 。其表示式如下,其中y代表真實值分類(0或1),a代表**值。

在tensorflow中常見的交叉熵函式有:

圖:在tensorflow裡常用的損失函式如表所示。

當然,也可以像mse那樣使用自己組合的公式計算交叉熵,舉例,對於softmax後的結果logits我們可以對其使用公式-tf.reduce_sum(labels*tf.log(logits),1),就等同於softmax_cross_entropy_with_logits得到的結果。

import tensorflow as tf

labels = [[0, 0, 1], [0, 1, 0]]

logits = [[2, 0.5, 6], [0.1, 0, 3]]

logits_scaled = tf.nn.softmax(logits)

logits_scaled2 = tf.nn.softmax(logits_scaled)

result1 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)

result2 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits_scaled)

result3 = -tf.reduce_sum(labels * tf.log(logits_scaled), 1)

with tf.session() as sess:

print("scaled=", sess.run(logits_scaled))

print("scaled2=", sess.run(logits_scaled2))

# 經過第二次的softmax後,分布概率會有變化

print("rel1=", sess.run(result1), "\n") # 正確的方式

print("rel2=", sess.run(result2), "\n")

# 如果將softmax變換完的值放進去會,就相當於算第二次softmax的loss,所以會出錯

print("rel3=", sess.run(result3))

執行上面**,輸出結果如下:

scaled= [[ 0.01791432 0.00399722 0.97808844]

[ 0.04980332 0.04506391 0.90513283]]

scaled2= [[ 0.21747023 0.21446465 0.56806517]

[ 0.2300214 0.22893383 0.54104471]]

rel1= [ 0.02215516 3.09967351]

rel2= [ 0.56551915 1.47432232]

rel3= [ 0.02215518 3.09967351]

下面開始驗證下前面所說的實驗:

tf 損失函式 TensorFlow裡面損失函式

2 交叉熵 交叉熵 crossentropy 也是loss演算法的一種,一般用在分類問題上,表達的意識為 輸入樣本屬於某一類的概率 其表示式如下,其中y代表真實值分類 0或1 a代表 值。在tensorflow中常見的交叉熵函式有 sigmoid交叉熵 softmax交叉熵 sparse交叉熵 加權...

TensorFlow 損失函式

import numpy as np import tensorflow as tf sess tf.interactivesession 1.多分類中的softmax函式在多分類的神經網路中,通常在最後一層接乙個softmax層。對於n分類問題,softmax層就有n個結點,每個結點輸出的就是該類...

TensorFlow損失函式

tensorflow損失函式 正如前面所討論的,在回歸中定義了損失函式或目標函式,其目的是找到使損失最小化的係數。本文將介紹如何在 tensorflow 中定義損失函式,並根據問題選擇合適的損失函式。宣告乙個損失函式需要將係數定義為變數,將資料集定義為佔位符。可以有乙個常學習率或變化的學習率和正則化...