自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在Keras中創(chuàng)建自定義損失函數(shù)?

人工智能 深度學(xué)習(xí)
Keras 是一個(gè)創(chuàng)建神經(jīng)網(wǎng)絡(luò)的庫,它是開源的,用 Python 語言編寫。Keras 不支持低級(jí)計(jì)算,但它運(yùn)行在諸如 Theano 和 TensorFlow 之類的庫上。

[[284375]]
Dhruv Deshmukh 發(fā)布在 Unsplash 上的照片

我們使用損失函數(shù)來計(jì)算一個(gè)給定的算法與它所訓(xùn)練的數(shù)據(jù)的匹配程度。損失計(jì)算是基于預(yù)測(cè)值和實(shí)際值之間的差異來做的。如果預(yù)測(cè)值與實(shí)際值相差甚遠(yuǎn),損失函數(shù)將得到一個(gè)非常大的數(shù)值。

Keras 是一個(gè)創(chuàng)建神經(jīng)網(wǎng)絡(luò)的庫,它是開源的,用 Python 語言編寫。Keras 不支持低級(jí)計(jì)算,但它運(yùn)行在諸如 Theano 和 TensorFlow 之類的庫上。

在本教程中,我們將使用 TensorFlow 作為 Keras backend。backend 是一個(gè) Keras 庫,用于執(zhí)行計(jì)算,如張量積、卷積和其他類似的活動(dòng)。

 

[[284376]]
Karim MANJRA 發(fā)布在 Unsplash 上的照片

 

keras 中常用的損失函數(shù)

如上所述,我們可以創(chuàng)建一個(gè)我們自己的自定義損失函數(shù);但是在這之前,討論現(xiàn)有的 Keras 損失函數(shù)是很好的。下面是兩個(gè)最常用的:

  • 均方誤差

均方誤差(MSE)測(cè)量誤差平方的平均值。它是預(yù)測(cè)值和實(shí)際值之間的平均平方差。

  • 平均絕對(duì)誤差

平均絕對(duì)誤差(MAE)是兩個(gè)連續(xù)變量之間差的度量,通常用 x 和 y 表示。平均絕對(duì)誤差是絕對(duì)誤差 e=y-x 的平均值,其中 y 是預(yù)測(cè)值,x 是實(shí)際值。

什么是自定義損失函數(shù)?

對(duì)于不同的損失函數(shù),計(jì)算損失的公式有不同的定義。在某些情況下,我們可能需要使用 Keras 沒有提供的損失計(jì)算公式。在這種情況下,我們可以考慮定義和使用我們自己的損失函數(shù)。這種用戶定義的損失函數(shù)稱為自定義損失函數(shù)。

Keras 中的自定義損失函數(shù)可以以我們想要的方式提高機(jī)器學(xué)習(xí)模型的性能,并且對(duì)于更有效地解決特定問題非常有用。例如,假設(shè)我們正在構(gòu)建一個(gè)股票投資組合優(yōu)化模型。在這種情況下,設(shè)計(jì)一個(gè)定制損失函數(shù)將有助于實(shí)現(xiàn)對(duì)在錯(cuò)誤方向上預(yù)測(cè)價(jià)格變動(dòng)的巨大懲罰。

我們可以通過編寫一個(gè)返回標(biāo)量并接受兩個(gè)參數(shù)(即真值和預(yù)測(cè)值)的函數(shù),在 Keras 中創(chuàng)建一個(gè)自定義損失函數(shù)。然后,我們將自定義損失函數(shù)傳遞給 model.compile 作為參數(shù),就像處理任何其他損失函數(shù)一樣。

實(shí)現(xiàn)自定義損失函數(shù)

現(xiàn)在讓我們?yōu)槲覀兊?Keras 模型實(shí)現(xiàn)一個(gè)自定義的損失函數(shù)。首先,我們需要定義我們的 Keras 模型。我們的模型實(shí)例名是 keras_model,我們使用 keras 的 sequential()函數(shù)來創(chuàng)建模型。

我們有三個(gè)層,都是形狀為 64、64 和 1 的密集層。我們有一個(gè)為 1 的輸入形狀,我們使用 ReLU 激活函數(shù)(校正線性單位)。

如何在Keras中創(chuàng)建自定義損失函數(shù)?

一旦定義了模型,我們就需要定義我們的自定義損失函數(shù)。其實(shí)現(xiàn)如下所示。我們將實(shí)際值和預(yù)測(cè)值傳遞給這個(gè)函數(shù)。

注意,我們將實(shí)際值和預(yù)測(cè)值的差除以 10,這是損失函數(shù)的自定義部分。在缺省損失函數(shù)中,實(shí)際值和預(yù)測(cè)值的差值不除以 10。

記住,這完全取決于你的特定用例需要編寫什么樣的自定義損失函數(shù)。在這里我們除以 10,這意味著我們希望在計(jì)算過程中降低損失的大小。

在 MSE 的默認(rèn)情況下,損失的大小將是此自定義實(shí)現(xiàn)的 10 倍。因此,當(dāng)我們的損失值變得非常大并且計(jì)算變得非常昂貴時(shí),我們可以使用這種定制的損失函數(shù)。

在這里,我們從這個(gè)函數(shù)返回一個(gè)標(biāo)量自定義損失值。

 

如何在Keras中創(chuàng)建自定義損失函數(shù)?

定義 keras 的自定義損失函數(shù)

 

要進(jìn)一步使用自定義損失函數(shù),我們需要定義優(yōu)化器。我們將在這里使用 RMSProp 優(yōu)化器。RMSprop 代表均方根傳播。RMSprop 優(yōu)化器類似于具有動(dòng)量的梯度下降。常用的優(yōu)化器被命名為 rmsprop、Adam 和 sgd。

我們需要將自定義的損失函數(shù)和優(yōu)化器傳遞給在模型實(shí)例上調(diào)用的 compile 方法。然后我們打印模型以確保編譯時(shí)沒有錯(cuò)誤。

 

如何在Keras中創(chuàng)建自定義損失函數(shù)?

Keras 模型優(yōu)化器和編譯模型

 

現(xiàn)在是時(shí)候訓(xùn)練這個(gè)模型,看看它是否正常工作了。為此,我們?cè)谀P蜕鲜褂脭M合方法,傳遞自變量 x 和因變量 y 以及 epochs=100。

這里的目的是確保模型訓(xùn)練沒有任何錯(cuò)誤,并且隨著 epoch 數(shù)的增加,損失逐漸減少。你可以查看下圖中的模型訓(xùn)練的結(jié)果:

 

如何在Keras中創(chuàng)建自定義損失函數(shù)?

epoch=100 的 Keras 模型訓(xùn)練

 

結(jié)語

在本文中,我們了解了什么是自定義損失函數(shù),以及如何在 Keras 模型中定義一個(gè)損失函數(shù)。然后,我們使用自定義損失函數(shù)編譯了 Keras 模型。最后,我們成功地訓(xùn)練了模型,實(shí)現(xiàn)了自定義損失功能。

責(zé)任編輯:未麗燕 來源: 雷鋒網(wǎng)
相關(guān)推薦

2021-07-16 11:00:40

Django用戶模型Python

2021-07-01 11:07:49

Swift 自定義操作符

2019-06-21 09:50:47

Windows 10自定義分辨率

2024-05-08 17:05:44

2009-07-03 18:20:45

VSTS 2010網(wǎng)絡(luò)

2021-07-15 16:41:21

Swift查詢函數(shù)

2015-02-12 15:33:43

微信SDK

2010-05-11 13:16:21

Unix awk

2010-08-03 16:13:01

FlexBuilder

2022-08-04 18:30:59

DockerfileDocker 鏡像Linux

2021-06-17 06:52:37

C#自定義異常

2013-03-28 16:59:56

Android開發(fā)自定義TitleBar

2017-06-20 12:48:55

React Nativ自定義模塊Note.js

2023-10-31 09:10:39

2010-09-14 16:47:23

SQL自定義函數(shù)

2022-04-14 06:20:25

GNOME桌面應(yīng)用

2022-05-07 10:22:32

JavaScript自定義前端

2009-11-25 14:36:39

PHP函數(shù)usort(

2010-04-28 12:33:36

Oracle自定義函數(shù)

2010-10-25 16:05:07

oracle自定義函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)