您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關使用tensorflow怎么自定義損失函數,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
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 #在windows下,下面用這個where替代,因為調用tf.select會報錯 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 = 128 X = rdm.rand(dataset_size, 2) """ 設置回歸的正確值為兩個輸入的和加上一個隨機量,之所以要加上一個隨機量是 為了加入不可預測的噪音,否則不同損失函數的意義就不大了,因為不同損失函數 都會在能完全預測正確的時候最低。一般來說,噪音為一個均值為0的小量,所以 這里的噪音設置為-0.05, 0.05的隨機數。 """ Y = [[x1 + x2 + rdm.rand()/10.0-0.05] for (x1, x2) in X] with tf.Session() as sess: init = tf.global_variables_initializer() sess.run(init) 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={x:X[start:end], y_:Y[start:end]}) print(sess.run(w1)) [[ 1.01934695] [ 1.04280889]
最終結果如上面所示。
因為我們當初生成訓練數據的時候,y是x1 + x2,所以回歸結果應該是1,1才對。
但是,由于我們加了自己定義的損失函數,所以,傾向于預估多一點。
如果,我們將loss_less和loss_more對調,我們看一下結果:
[[ 0.95525807]
[ 0.9813394 ]]
以上就是使用tensorflow怎么自定義損失函數,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。