Tensorflow筆記之(損失函式)

2022-08-23 19:03:08 字數 3737 閱讀 1621

常用的損失函式有:

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))

import

tensorflow 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 中定義損失函式,並根據問題選擇合適的損失函式。宣告乙個損失函式需要將係數定義為變數,將資料集定義為佔位符。可以有乙個常學習率或變化的學習率和正則化...