如何在Keras中创建自定义损失函数?

作者: skura 2019-12-02 21:29:45

如何在Keras中创建自定义损失函数?
Dhruv Deshmukh 发布在 Unsplash 上的照片

我们使用损失函数来计算一个给定的算法与它所训练的数据的匹配程度。损失计算是基于预测值和实际值之间的差异来做的。如果预测值与实际值相差甚远,损失函数将得到一个非常大的数值。

Keras 是一个创建神经网络的库,它是开源的,用 Python 语言编写。Keras 不支持低级计算,但它运行在诸如 Theano 和 TensorFlow 之类的库上。

在本教程中,我们将使用 TensorFlow 作为 Keras backend。backend 是一个 Keras 库,用于执行计算,如张量积、卷积和其他类似的活动。

如何在Keras中创建自定义损失函数?
Karim MANJRA 发布在 Unsplash 上的照片

keras 中常用的损失函数

如上所述,我们可以创建一个我们自己的自定义损失函数;但是在这之前,讨论现有的 Keras 损失函数是很好的。下面是两个最常用的:

  • 均方误差

均方误差(MSE)测量误差平方的平均值。它是预测值和实际值之间的平均平方差。

  • 平均绝对误差

平均绝对误差(MAE)是两个连续变量之间差的度量,通常用 x 和 y 表示。平均绝对误差是绝对误差 e=y-x 的平均值,其中 y 是预测值,x 是实际值。

什么是自定义损失函数?

对于不同的损失函数,计算损失的公式有不同的定义。在某些情况下,我们可能需要使用 Keras 没有提供的损失计算公式。在这种情况下,我们可以考虑定义和使用我们自己的损失函数。这种用户定义的损失函数称为自定义损失函数。

Keras 中的自定义损失函数可以以我们想要的方式提高机器学习模型的性能,并且对于更有效地解决特定问题非常有用。例如,假设我们正在构建一个股票投资组合优化模型。在这种情况下,设计一个定制损失函数将有助于实现对在错误方向上预测价格变动的巨大惩罚。

我们可以通过编写一个返回标量并接受两个参数(即真值和预测值)的函数,在 Keras 中创建一个自定义损失函数。然后,我们将自定义损失函数传递给 model.compile 作为参数,就像处理任何其他损失函数一样。

实现自定义损失函数

现在让我们为我们的 Keras 模型实现一个自定义的损失函数。首先,我们需要定义我们的 Keras 模型。我们的模型实例名是 keras_model,我们使用 keras 的 sequential()函数来创建模型。

我们有三个层,都是形状为 64、64 和 1 的密集层。我们有一个为 1 的输入形状,我们使用 ReLU 激活函数(校正线性单位)。

如何在Keras中创建自定义损失函数?

一旦定义了模型,我们就需要定义我们的自定义损失函数。其实现如下所示。我们将实际值和预测值传递给这个函数。

注意,我们将实际值和预测值的差除以 10,这是损失函数的自定义部分。在缺省损失函数中,实际值和预测值的差值不除以 10。

记住,这完全取决于你的特定用例需要编写什么样的自定义损失函数。在这里我们除以 10,这意味着我们希望在计算过程中降低损失的大小。

在 MSE 的默认情况下,损失的大小将是此自定义实现的 10 倍。因此,当我们的损失值变得非常大并且计算变得非常昂贵时,我们可以使用这种定制的损失函数。

在这里,我们从这个函数返回一个标量自定义损失值。

如何在Keras中创建自定义损失函数?

定义 keras 的自定义损失函数

要进一步使用自定义损失函数,我们需要定义优化器。我们将在这里使用 RMSProp 优化器。RMSprop 代表均方根传播。RMSprop 优化器类似于具有动量的梯度下降。常用的优化器被命名为 rmsprop、Adam 和 sgd。

我们需要将自定义的损失函数和优化器传递给在模型实例上调用的 compile 方法。然后我们打印模型以确保编译时没有错误。

如何在Keras中创建自定义损失函数?

Keras 模型优化器和编译模型

现在是时候训练这个模型,看看它是否正常工作了。为此,我们在模型上使用拟合方法,传递自变量 x 和因变量 y 以及 epochs=100。

这里的目的是确保模型训练没有任何错误,并且随着 epoch 数的增加,损失逐渐减少。你可以查看下图中的模型训练的结果:

如何在Keras中创建自定义损失函数?

epoch=100 的 Keras 模型训练

结语

在本文中,我们了解了什么是自定义损失函数,以及如何在 Keras 模型中定义一个损失函数。然后,我们使用自定义损失函数编译了 Keras 模型。最后,我们成功地训练了模型,实现了自定义损失功能。

Keras 神经网络 TensorFlow
上一篇:人工智能会给社会带来什么?一文看懂AI的变革 下一篇:从数据到洞察 IBM赋能企业加速人工智能之旅
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

为什么神经网络如此强大?

众所周知,神经网络非常强大,可以将其用于几乎任何统计学习问题,而且效果很好。 但是您是否考虑过为什么会这样? 为什么在大多数情况下此方法比许多其他算法更强大?

闻数起舞 ·  4天前
你在打王者农药,有人却用iPhone来训练神经网络

在 iOS 设备上也可以直接训练 LeNet 卷积神经网络,而且性能一点也不差,iPhone 和 iPad 也能化为实实在在的生产力。

佚名 ·  2020-05-28 15:55:06
用Keras来理解状态LSTM递归神经网络

在本教程中,我们将开发和对比许多不同的LSTM递归神经网络模型。一起来看一下。

沂水寒城 ·  2020-05-27 11:10:54
画图太丑拿不出手?有人做了套机器学习专用画图模板,还有暗黑模式

论文、博客写好了,里面的图可怎么画?对于很多研究人员和开发者来说,内容的「可视化」是一个大问题。如果从头开始画,配色、空间布局都很伤脑筋,而且画丑了也拿不出手,要是有模板可以套就好了。

张倩、魔王 ·  2020-05-26 14:28:12
机器学习必备:TensorFlow的11个使用技巧整理

在本文中,我们将探索TF 2.0的10个功能,这些功能让TensorFlow的使用更加顺畅,减少了代码行并提高了效率,因为这些函数/类属于TensorFlow API。

为AI呐喊 ·  2020-05-19 09:00:26
神经网络?决策树?都做不到!谁能解决可解释性AI?

神经网络是准确的,但无法解释;在计算机视觉中,决策树是可解释的,但不准确。可解释性AI(XAI)试图弥合这一分歧,但正如下面所解释的那样,“XAI在不直接解释模型的情况下证明了决策的合理性”。

读芯术 ·  2020-05-14 08:40:57
超简单的神经网络构建方法,你上你也行!

假如你只是了解人工神经网络基础理论,却从未踏足如何编写,跟着本文一起试试吧。你将会对如何在PyTorch 库中执行人工神经网络运算,以预测原先未见的数据有一个基本的了解。

读芯术 ·  2020-05-11 13:44:38
机器学习修炼手册:从倔强青铜到最强王者

居家隔离期间只顾着玩游戏刷剧真的不会坐立不安吗?与其心神不安打Boss,不如来面对机器学习这个大BOSS。笔者整理的这套课程从入门到高级,快来提升你的段位吧!

读芯术 ·  2020-05-10 18:02:42
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载