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

更多资讯推荐

最喜欢随机森林?TensorFlow开源决策森林库TF-DF

近日,TensorFlow 开源了 TensorFlow 决策森林 (TF-DF)。TF-DF 是用于训练、服务和解释决策森林模型(包括随机森林和梯度增强树)生产方面的 SOTA 算法集合。

机器之心 ·  2021-05-28 17:18:44
用Transformer进行图像语义分割,性能超最先进的卷积方法

Transformer跨界计算机视觉领域真是越来越频繁了、效果也越来越成功了!

丰色 ·  2021-05-21 10:06:01
每次矩阵相乘用不到一个光子,手写数字识别准度超90%,光学神经网络效率提升数个量级

康奈尔大学等机构的这项研究证明了光学神经网络在原理上比传统神经网络具有更多基本的能效优势。在光子预算限制为每个标量乘积少于一个光子,研究者使用光学神经网络实现了非常高的手写数字分类准确度。

力元、杜伟 ·  2021-05-19 10:22:42
多尺度表征10亿像素图像,斯坦福神经场景表征新方法入选SIGGRAPH

斯坦福大学近日的一项研究给出了解决方案,他们提出了一种新的隐式 - 显式混合网络架构和相应训练策略,可以在训练和推理过程中根据信号的局部复杂度来自适应地分配资源。

佚名 ·  2021-05-17 10:05:08
LeCun联手博士后arxiv发文,遭reddit网友质疑:第一张图就错了

两个月前自监督学习领域出了一篇重磅论文,LeCun和他的学生共同完成新模型Barlow Twins,reddit网友指出,第一张图就错了!

佚名 ·  2021-05-11 14:26:30
新的人工神经元设备可以使用极少能量运行神经网络计算

加州大学圣地亚哥分校的研究人员开发了一种新的人工神经元装置,训练神经网络来执行任务。

佚名 ·  2021-04-29 08:50:39
进行三万多次地震训练后,他们发现了快速预测震动强度的新方法

用来训练DeepShake网络的地震数据是来自于2019年加州Ridgecrest序列的地震记录。

大数据文摘 ·  2021-04-28 14:35:55
高数有救了!神经网络不到一秒就能求解偏微分方程

对于特别复杂的偏微分方程,可能需要数百万个CPU小时才能求解出来一个结果。随着问题越来越复杂,从设计更优秀的火箭发动机到模拟气候变化,科学家们需要一个更「聪明」的求解方法。

新智元 ·  2021-04-22 09:44:40
Copyright©2005-2021 51CTO.COM 版权所有 未经许可 请勿转载