将此损失函数方程式转换为python代码

时间:2019-10-25 02:19:15

标签: python keras loss-function equation-solving hinge-loss

请检查此链接的等式,并将其转换为用于简单keras模型的python损失函数。

EQUATION PICTURE OR IMAGE LINK FOR CONVERTING IT TO PYTHON'S KERAS REQUIRED LOSS EQUATION

其中图中等式的最大部分或曲线选定部分是铰链损耗,yi表示每个的标签 例如,φ(x)表示特征表示,b是偏差,k是训练示例的总数,w是要学习的分类器。

为便于检查,示例方程式为-

min(w) [
1/k(sum of i to k)
max(0, 1 - y_i(w.φ(x) - b))
]
+
1/2||w||^ 2 
.

实际上,我可以在图中找到方程的最大部分或弯曲部分,但找不到1/2 * || w || ^ 2部分。

您也检查此链接以寻求帮助-

similar link

在这里,我附加了一些示例代码来清除我的问题的概念:

print("Create Model")
model = Sequential()
model.add(Dense(512,     
input_dim=4096, init='glorot_normal',W_regularizer=l2(0.001),activation='relu'))
model.add(Dropout(0.6))
model.add(Dense(32, init='glorot_normal',W_regularizer=l2(0.001)))
model.add(Dropout(0.6))
model.add(Dense(1, init='glorot_normal',W_regularizer=l2(0.001),activation='sigmoid'))

adagrad=Adagrad(lr=0.01, epsilon=1e-08)     
model.compile(loss= required_loss_function, optimizer=adagrad)

def required_loss_function(y_true, y_pred): 
      IN THIS LOSS FUNCTION, 
      CONVERT THE EQUATION IN THE 
      PICTURE INTO PYTHON CODE.

作为提法,您需要找到的是-1/2 * || w || ^ 2。 正如我可以在链接的图片中找到等式的其余部分或其他部分的python代码。铰链损耗部分可以使用以下公式轻松计算-

import keras

keras.losses.hinge(y_true, y_pred)

如果您需要进一步的帮助,请发表评论以获取详细信息。

1 个答案:

答案 0 :(得分:0)

您的屏幕快照显示了整个目标函数,但是只有sum(max(...))术语称为 loss 术语。因此,仅需要在required_loss_function中实现该术语。确实,您可以使用keras库中预先烘焙的铰链丢失,而不用自己编写-当然,除非您应该自己编写它作为练习的一部分。

另一个项0.5 * || w || ^ 2项是正则化项。具体来说,这是一个L2正则化术语。 keras具有一种完全独立的处理正则化的方法,您可以在https://keras.io/regularizers/中阅读。基本上,这相当于创建一个l2实例keras.regularizers.l2(lambdaParameter)并使用.add()方法将其附加到您的模型中(您的屏幕截图方程式没有一个参数可以缩放正则化项-因此,如果这实际上就是您应该实现的,这意味着您的lambdaParameter为1.0)。

但是您提供的清单似乎已经在不同的上下文中多次应用了l2这样的正则化函数(我完全不熟悉keras,所以我真的不知道发生了什么。我想比您的屏幕快照中所示的模型更复杂)。

无论哪种方式,您的问题的答案是正则化项是单独处理的,并且属于损失函数(损失函数的签名也为我们提供了暗示:没有{ {1}}参数传递给它-仅wy_true)。