机器学习(四)——损失函数
生活随笔
收集整理的這篇文章主要介紹了
机器学习(四)——损失函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
損失函數(loss):預測值(y)與已知答案(y_)的差距,優化目標loss最小
以下1與2兩個案例的loss函數都是針對酸奶日銷量案例
1、均方誤差mse損失函數
import tensorflow as tf import numpy as np###擬合的是y = x1 + x2的函數 SEED = 2333 rdm = np.random.RandomState(seed=SEED) # 生成0至1不包含1之間的隨機數 x = rdm.rand(32, 2)#生成32行 2列的特征 ###生成噪聲[0, 1) / 10 = [0, 0.1); 添加點噪聲使結果更真實 y_ = [[x1 + x2 + (rdm.rand() / 10.0 - 0.05)] for (x1, x2) in x] x = tf.cast(x, dtype=tf.float32)#轉換數據類型###這里隨機初始化參數w1 2行 1列, 后面會迭代更新 w1 = tf.Variable(tf.random.normal([2, 1], stddev=1, seed=1)) epoch = 15000 lr = 0.002 for epoch in range(epoch):with tf.GradientTape() as tape:y = tf.matmul(x, w1)###tf.reduce_mean(tf.square(y_ - y))求的是均方誤差loss_mse = tf.reduce_mean(tf.square(y_ - y))grads = tape.gradient(loss_mse, w1)#對w1求偏導###更新w1w1.assign_sub(lr * grads)##每500次打印一下if epoch % 500 == 0:print("After %d training steps, w1 is "%(epoch))print(w1.numpy(),"\n") print("Final w1 is:", w1.numpy())2、自定義損失函數(添加了成本與盈利)
import tensorflow as tf import numpy as np SEED = 2333 # 成本為1 COST = 1 # 利潤為99 PROFIT = 99 ###如果實際y_比y大則損失的是利潤,否則應損失成本,用自定義的損失函數 rdm = np.random.RandomState(seed= SEED)# 生成0至1不包含1之間的隨機數 x = rdm.rand(32, 2) y_ = [[x1 + x2 + (rdm.rand() / 10.0 - 0.05)] for (x1, x2) in x] x = tf.cast(x,dtype=tf.float32) w1 = tf.Variable(tf.random.normal([2, 1], stddev=1, seed=1))epoch = 10000 lr = 0.002 for epoch in range(epoch):with tf.GradientTape() as tape:y = tf.matmul(x, w1)###loss是自定義的損失函數###tf.where作用 如果y大就返回(y - y_) * COST ;否則返回(y_ - y) * PROFITloss = tf.reduce_sum(tf.where(tf.greater(y, y_), (y - y_) * COST, (y_ - y) * PROFIT))##求w1偏導grads = tape.gradient(loss, w1)w1.assign_sub(lr * grads) print("Final w1 is:", w1.numpy()) # Final w1 is: [[1.1146302] # [1.1366452]] ##都大于1說明在盡量往多的預測3、交叉熵CE損失函數
import tensorflow as tf import numpy as np ###分別計算[1, 0] 與 [0.6, 0.4] [0.8, 0.2]的交叉熵 越小的越接近[1,0] #tf.losses.categorucal_crossentropy計算交叉熵的函數 # loss_ce1 = tf.losses.categorucal_crossentropy([1, 0], [0.6, 0.4]) # loss_ce2 = tf.losses.categorucal_crossentropy([1, 0], [0.8, 0.2]) # # print("loss_ce1:", loss_ce1) # print("loss_ce2:", loss_ce2)###softmax與交叉熵結合,經過softmax使數據符合概率分布 # tf.nn.softmax_cross_entropy_with_logits(y_, y) y_ = np.array([[1, 0, 0], [1, 0, 1], [0, 0, 1], [1, 0, 0]]) y = np.array([[12,3,2], [3,10,1], [1,2,5], [4,6.5,1.2]]) loss_ce = tf.nn.softmax_cross_entropy_with_logits(y_, y) print(loss_ce)總結
以上是生活随笔為你收集整理的机器学习(四)——损失函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习(三)——预备知识(学习率与激活
- 下一篇: 机器学习(五)——缓解过拟合