TensorFlow 損失函式

2021-08-29 12:36:38 字數 3102 閱讀 7870

import numpy as np

import tensorflow as tf

sess = tf.interactivesession(

)

1.多分類中的softmax函式
在多分類的神經網路中,通常在最後一層接乙個softmax層。對於n分類問題,softmax層就有n個結點,每個結點輸出的就是該類別的概率.

例如5分類的問題,神經網路可能會輸出[0,0.6,0.3,0,0.1],由於該樣本屬於第2類的概率最大,為0.6,故屬於2類。

2.交叉熵損失函式
交叉熵是用來衡量兩個概率分布p和q的差異程度的,其定義為:h(p

,q)=

−∑xp

(x)l

ogq(

x)h(p,q)=-\sum_xp(x)log

h(p,q)

=−∑x

​p(x

)log

q(x)

交叉熵通過和softmax函式連在一起使用,tensorflow對這兩個功能進行了統一封裝,提供了tf.nn.softmax_cross_entropy_with_logits

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y)

print

(cross_entropy.

eval()

)

1.2369158210025892
回歸問題通常使用均方誤差損失函式,其定義為:

mse = tf.reduce_mean(tf.square(y_-y)

)print

(mse.

eval()

)

0.052000000000000005
# 產生模擬資料

y_ = np.array([0

,1,0

,0,0

])# 真實標籤

y = np.array([0

,0.6

,0.3,0

,0.1])

# 模型輸出的**值

# 計算交叉熵

# tf.reduce_mean():按預設軸求均值

# tf.clip_by_value(t, clip_value_min, clip_value_max):將t值卡在clip_value_min到clip_value_max的區間內

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)

######定義自己的loss#######

loss_less =

10loss_more =

1# tf.greater()函式相當於max()函式,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(

0.001

).minimize(loss)

# 通過隨機數生成乙個模擬資料集

rdm = randomstate(1)

dataset_size =

128x = rdm.rand(dataset_size,2)

y =[

[x1+x2+rdm.rand()/

10.0

-0.05

]for

(x1,x2)

in x]

# 訓練神經網路

with tf.session(

)as sess:

init_op = tf.global_variables_initializer(

) sess.run(init_op)

steps =

5000

for i in

range

(steps)

: start =

(i*batch_size)

%dataset_size

end =

min(start+batch_size,dataset_size)

sess.run(train_step,feed_dict=

)print

(sess.run(w1)

)

[[1.019347 ]

[1.0428089]]

TensorFlow損失函式

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

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

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

TensorFlow裡面損失函式

損失函式的選取取決於輸入標籤資料的型別 在tensorflow沒有單獨的mse函式,不過由於公式比較簡單,往往開發者都會自己組合,而且也可以寫出n種寫法,例如 mse tf.reduce mean tf.pow tf.sub logits,outputs 2.0 mse tf.reduce mean...