常用的損失函式有:
1.均方誤差: tf.reduce_mean(tf.square(真實值 - **值))
2.自定義損失函式:
3.交叉熵:tf.nn.softmax_cross_entropy_with_logits(lables = 真實值, logits = **值)
通過**酸奶日銷量與影響因素x1,x2之間關係,理解損失函式的用法。
1.均方誤差: tf.reduce_mean(tf.square(真實值 - **值))
import列印結果:tensorflow as tf
import
numpy as np
batch_size = 8step = 5000 *batch_size
lr = 1e-3np.random.seed(1)
#構建資料集
x = np.random.random([32, 2])
y_ = [[x1 + x2 + (np.random.rand()/10 - 0.05)] for x1, x2 inx]#
定義佔位符
x = tf.placeholder(tf.float32, shape=(none, 2))
y_ = tf.placeholder(tf.float32, shape=(none, 1))
#定義權重
w1 = tf.variable(tf.random_normal([2, 1], stddev=1))
#w2 = tf.variable(tf.random_normal([3, 1], stddev=1))
#構建前向傳播過程
y =tf.matmul(x, w1)
#y = tf.matmul(a, w2)
#定義損失函式,梯度下降減小損失
loss = tf.reduce_mean(tf.square(y_ -y))
train_step =tf.train.gradientdescentoptimizer(lr).minimize(loss)
#建立會話,開始訓練
with tf.session() as sess:
init =tf.global_variables_initializer()
sess.run(init)
length =len(x)
for i in
range(step):
start = (i * batch_size) %length
end = start +batch_size
sess.run(train_step, feed_dict=)
if i % 1000 ==0:
loss_ = sess.run(loss, feed_dict=)
#print(i, loss_)
print(sess.run(w1))
w1中的x1權重與x2的權重是在逐漸接近於1,與我們之間的生成公式是一致的。
上述**是使用均方誤差來減小損失,從而預設認為銷量**多了或者**少了都是一樣的,而實際上**多了損失的是成本,**少了損失的是利潤。
所以在這裡使用均方誤差作為損失函式是沒法講利益最大化的,所以就要用到自定義的損失函式。
計算**值與真實值之間的損失的累計和,所以可以吧損失定義為乙個分段函式。
# loss = tf.reduce_mean(tf.square(y_ - y))#tf.greater(y, y_) a > b ? 輸出true, false
#tf.where(條件語句, 為true執行, 為false執行)
loss = tf.reduce_sum(tf.where(tf.greater(y, y_), (y - y_)*cost, (y_ - y)*profit))
importtensorflow as tf
import
numpy as np
batch_size = 8step = 5000 *batch_size
lr = 1e-3cost = 1profit = 9
if__name__ == '
__main__':
np.random.seed(1)
#構建資料集
x = np.random.random([32, 2])
y_ = [[x1 + x2 + (np.random.rand() / 10 - 0.05)] for x1, x2 in
x]
#定義佔位符
x = tf.placeholder(tf.float32, shape=(none, 2))
y_ = tf.placeholder(tf.float32, shape=(none, 1))
#定義權重
w1 = tf.variable(tf.random_normal([2, 1], stddev=1))
#w2 = tf.variable(tf.random_normal([3, 1], stddev=1))
#構建前向傳播過程
y =tf.matmul(x, w1)
#y = tf.matmul(a, w2)
#定義損失函式,梯度下降減小損失
#tf.greater(y, y_) a > b ? 輸出true, false
#tf.where(條件語句, 為true執行, 為false執行)
loss = tf.reduce_sum(tf.where(tf.greater(y, y_), (y - y_)*cost, (y_ - y)*profit))
train_step =tf.train.gradientdescentoptimizer(lr).minimize(loss)
#建立會話,開始訓練
可見模型在往多里**,因為成本1元而利潤9元,所以模型會往多里**。
當我們把成本改成9元利潤改成1元時得到如下結果
可見模型在往少里進行**。
深度學習TensorFlow筆記 損失函式
1.損失函式 經典損失函式 交叉熵 交叉熵刻畫了兩個概率分布之間的距離,它是分類問題中使用比較廣的一種損失函式。通過q來表示p的交叉熵為 softmax將神經網路前向傳播得到的結果變成概率分布,原始神經網路的輸出被用作置信度來生成新的輸出,而新的輸出滿足概率分布的所有要求。交叉熵函式不是對稱的,h ...
TensorFlow 損失函式
import numpy as np import tensorflow as tf sess tf.interactivesession 1.多分類中的softmax函式在多分類的神經網路中,通常在最後一層接乙個softmax層。對於n分類問題,softmax層就有n個結點,每個結點輸出的就是該類...
TensorFlow損失函式
tensorflow損失函式 正如前面所討論的,在回歸中定義了損失函式或目標函式,其目的是找到使損失最小化的係數。本文將介紹如何在 tensorflow 中定義損失函式,並根據問題選擇合適的損失函式。宣告乙個損失函式需要將係數定義為變數,將資料集定義為佔位符。可以有乙個常學習率或變化的學習率和正則化...