DhruvDeshmukhUnsplash上的照片我们使用损失函数来计算给定算法与训练数据的匹配程度。损失计算基于预测值和实际值之间的差异。如果预测值与实际值相差甚远,损失函数将得到非常大的值。Keras是一个用于创建神经网络的库,它是开源的,用Python语言编写。Keras不支持低级计算,但它在Theano和TensorFlow等库上运行。在本教程中,我们将使用TensorFlow作为Keras后端。后端是一个Keras库,用于执行张量积、卷积和其他类似活动等计算。照片由KarimMANJRA在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激活函数(整流线性单元)。定义模型后,我们需要定义自定义损失函数。它的实现如下所示。我们将实际值和预测值传递给这个函数。注意,我们将实际值和预测值的差值除以10,这是损失函数的自定义部分。在默认损失函数中,实际值和预测值之间的差值不会除以10。请记住,这完全取决于您需要为您的特定用例编写什么样的自定义损失函数。这里我们除以10,这意味着我们希望在计算过程中减少损失的大小。在MSE的默认情况下,损失的大小将比此自定义实现大10倍。因此,当我们的损失值变得非常大且计算量大时,我们可以使用这个自定义损失函数。在这里,我们从该函数返回一个标量自定义损失值。为keras定义自定义损失函数为了进一步使用自定义损失函数,我们需要定义一个优化器。我们将在这里使用RMSProp优化器。RMSprop代表均方根传播。RMSprop优化器类似于动量梯度下降。常用的优化器命名为rmsprop、Adam和sgd。我们需要将自定义损失函数和优化器传递给模型实例上调用的编译方法。然后我们打印模型以确保它编译没有错误。Keras模型优化器和编译模型现在是训练模型并查看它是否有效的时候了。为此,我们对模型使用拟合方法,传递自变量x和因变量y以及epochs=100。这里的目的是保证模型训练时没有任何错误,并且随着epochs数量的增加,loss逐渐减小。您可以在下图中查看模型训练的结果:Keras模型训练,epoch=100结论在本文中,我们了解了自定义损失函数是什么以及如何在Keras模型中定义损失函数。然后,我们使用自定义损失函数编译了Keras模型。最后,我们成功地训练了实现自定义损失函数的模型。
