如何在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赋能企业加速人工智能之旅
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

二次元少女生成器、会开车的神经网络...2019年优秀的17个机器学习项目

为了挑选出2019年优秀的开源项目,最近某位Medium网友整理了2019年Reddit机器学习板块热门高赞项目资源汇总,一起来看看都有哪些项目上榜。

猿妹 ·  2019-12-25 14:29:35
避免神经网络过拟合的5种技术

最近一年我一直致力于深度学习领域。这段时间里,我使用过很多神经网络,比如卷积神经网络、循环神经网络、自编码器等等。我遇到的最常见的一个问题就是在训练时,深度神经网络会过拟合。

THU数据派 ·  2019-12-20 09:15:48
诠释图形处理器(GPU)和神经网络加速器芯片如何为汽车应用提供智能优势

汽车行业是推动人工智能(AI)发展的重要行业之一,这是因为该行业致力于自动驾驶汽车和高级驾驶员辅助系统(ADAS)的泛在利益。

Imagination Technologies汽车产品部总监Bryce Johnst ·  2019-12-18 14:00:33
如何对机器学习做单元测试

养成良好的单元测试的习惯,真的是受益终身的,特别是机器学习代码,有些bug真不是看看就能看出来的。

AI公园 ·  2019-12-18 10:25:12
一文搞懂神经网络

人工智能是这几年非常火的技术,上至九十九下至刚会走都对人工智能或多或少的了解。神经网络是人工智能的核心,也就是说没有神经网络就没有人工智能,那么这篇文章就带大家学习一下神经网络相关的知识。这篇文章没有数学公式、没有代码,旨在帮助读者快速掌握神经网络的核心知识。

朱钢 ·  2019-11-19 08:00:00
一文理清深度学习前馈神经网络 精选

前馈神经网络(feedforward neural network)是一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。

SAMshare ·  2019-11-06 17:00:51
面部识别必看!5篇论文了解如何实现人脸反欺诈、跨姿势识别等(附链接) 精选

我们可以使用面部识别来解锁手机,在安全门上验证身份,并在某些国家/地区进行刷脸支付。许多公司都投资于面部识别技术的研究和开发,本文将重点介绍其中的一些研究,并介绍五篇有关人脸识别的机器学习论文。

佚名 ·  2019-11-04 10:56:06
用Keras编写你的第一个神经网络,用不了30行代码! 精选

不妨了解神经网络的简单概述,并学习如何用Keras通过短短几行代码编写你的第一个神经网络。

布加迪 ·  2019-10-28 08:00:00
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载