0

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

将其转换为 Python 的 KERAS 所需的损失方程的公式图片或图像链接

其中图中方程的max部分或曲线选择部分为铰链损失,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 部分。

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

类似链接

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

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)

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

4

1 回答 1

0

您的屏幕截图显示了整个目标函数,但只有sum(max(...))术语称为损失项。因此,只有该术语需要在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,所以我真的不知道发生了什么——我想这是一个比那个更复杂的模型在您的屏幕截图中表示)。

无论哪种方式,您的问题的答案是正则化项是单独处理的,属于损失函数(损失函数的签名也给了我们这个提示:没有w参数传递给它——只有y_trueand y_pred)。

于 2019-10-26T00:14:59.490 回答