常用的有tf.nn.relu、tf.sigmoid(0~1)、tf.tanh(-1~1)。
cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1)))
注意這裡的y_,y可能為乙個矩陣,需要注意的是要使用「*」而不是使用tf.matmul(),因為我們不是想要使用矩陣乘法。具體區別在書77頁。
得到乙個n x m大小的矩陣後,n是batch_size,m為分類的類數。reduce_mean來取平均值。
有個疑問就是按照交叉熵的公式應該是把n * m個數加起來除以n,但是如果使用reduce_mean是除以n*m。
因為交叉熵一般會與softmax回歸一起使用,所以進行了封裝
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y)
在只有乙個正確答案的分類問題中,下面這個函式可以進一步加速計算過程 //sparse:稀少的,稀疏的
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y_,logits=y)
mse = tf.reduce_mean(tf.square(y_ - y))
例如:在**商品銷量時,如果**多了廠家會損失成本,**少了廠家會損失利潤,但是每個產品成本只有一塊,而利潤有十塊,這時均方誤差就不能很好的最大化銷售利潤。
這時的損失函式可以設定為當y(**資料)>y_,loss = 1(y - y_);當y<_y,loss = 10(y - y_)。通過這樣的自定義損失函式的優化,模型提供的**值更有可能最大化收益。
可以通過以下**來實現這個損失函式 //reduce有縮小的意思,可以理解為縮小維度
loss = tf.reduce_sum(tf.where(tf.greater(y, y_), (y - y_) * 1, (y_ - y) * 10))
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)
# 定義**多了和少了的成本
loss_less = 10
loss_more = 1
# 損失函式
loss = tf.reduce_sum(tf.where(tf.greater(y, y_), loss_more * (y - y_), loss_less * (y_ - y)))
train_step = tf.train.adamoptimizer(0.001).minimize(loss)
# 通過隨機數生成乙個模擬資料集
rdm = randomstate(1)
data_size = 128
x = rdm.rand(data_size, 2)
# 設定回歸的正確值為兩個輸入的和加上乙個隨機量
# 加上隨機量的是因為避免最後能完全正確**,不同的損失函式的效果就看不出來了
y = [[x1 + x2 + rdm.random() / 10.0 - 0.05] for (x1, x2) in x]
# 訓練神經網路
with tf.session() as sess:
init_op = tf.global_variables_initializer()
sess.run(init_op)
step = 20000
for i in range(step):
start = (i * batch_size) % data_size
end = min(start + batch_size, data_size)
sess.run(train_step, feed_dict=)
if i % 1000 == 0:
print(sess.run(w1))
最後可以發現w1的值都比[1,1]要大。可以通過改變loss_less,loss_more的值來感受區別。 TensorFlow 損失函式
import numpy as np import tensorflow as tf sess tf.interactivesession 1.多分類中的softmax函式在多分類的神經網路中,通常在最後一層接乙個softmax層。對於n分類問題,softmax層就有n個結點,每個結點輸出的就是該類...
TensorFlow損失函式
tensorflow損失函式 正如前面所討論的,在回歸中定義了損失函式或目標函式,其目的是找到使損失最小化的係數。本文將介紹如何在 tensorflow 中定義損失函式,並根據問題選擇合適的損失函式。宣告乙個損失函式需要將係數定義為變數,將資料集定義為佔位符。可以有乙個常學習率或變化的學習率和正則化...
深度學習TensorFlow筆記 損失函式
1.損失函式 經典損失函式 交叉熵 交叉熵刻畫了兩個概率分布之間的距離,它是分類問題中使用比較廣的一種損失函式。通過q來表示p的交叉熵為 softmax將神經網路前向傳播得到的結果變成概率分布,原始神經網路的輸出被用作置信度來生成新的輸出,而新的輸出滿足概率分布的所有要求。交叉熵函式不是對稱的,h ...