将此损失函数方程转换为python代码
请检查此链接的等式,并将其转换为简单keras模型的python损失函数 其中,图片中等式的最大部分或所选曲线部分是铰链损耗,yi表示每个的标签 例如,φ(x)表示特征表示,b表示偏差,k表示训练示例的总数,w表示要学习的分类器 为便于检查,样本方程为-将此损失函数方程转换为python代码,python,keras,loss-function,equation-solving,hinge-loss,Python,Keras,Loss Function,Equation Solving,Hinge Loss,请检查此链接的等式,并将其转换为简单keras模型的python损失函数 其中,图片中等式的最大部分或所选曲线部分是铰链损耗,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部分
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)
如果您需要进一步帮助,请评论详细信息。您的屏幕截图显示了整个目标函数,但只有
总和(最大值(…)
项称为损失项。因此,只有该术语需要在required\u loss\u函数中实现。事实上,您可能可以使用keras库中的预烘焙铰链损失,而不是自己编写,当然,除非您应该自己编写它作为练习的一部分
另一项,0.5*| | w | ^ 2项,是正则化项。具体来说,它是一个L2正则化项。keras有一种完全独立的处理正则化的方法,您可以在上阅读。基本上,它相当于创建一个l2
实例keras.regularizers.l2(lambdapameter)
,并使用.add()
方法将其附加到模型中(你的屏幕截图方程没有缩放正则化项的参数——因此,如果这就是你应该实现的,那就意味着你的lambdaParameter
将是1.0)
但您提供的列表似乎已经在不同的上下文中多次应用了这样的l2
正则化器(我对keras一点也不熟悉,所以我真的不知道发生了什么-我想这是一个比您的屏幕截图中表示的模型更复杂的模型)
不管是哪种方式,您的问题的答案都是正则化项是单独处理的,不属于损失函数(损失函数的签名也给了我们这个提示:没有w
参数传入它,只有y\u true
和y\u pred
).如果您展示了迄今为止您成功生成的代码,并指出其失败的方式和地方,可能会帮助stackoverflow社区帮助您消除特定的障碍。如果您正在寻找铰链损失,您可以尝试查看python代码的此链接-@jez请检查我的新更新,并帮助我解决问题1/方程的2*| w | | ^ 2部分。@Sampath请检查我的新更新,并帮助我解决方程的1/2*| w | | ^ 2部分。您已经有了部分损失,w |正则化器=l2(0.001)部分在损失中添加了一个项,基本上是该层的lambda*| w | ^ 2,所以您只需要将lambda设置为1。