将这个损失函数方程转换成python代码
Convert this loss function equation into python code
请检查这个 link 的等式并将其转换为一个简单的 keras 模型的 python 损失函数。
EQUATION PICTURE OR IMAGE LINK FOR CONVERTING IT TO PYTHON'S KERAS REQUIRED LOSS EQUATION
其中图中方程的max部分或curve selected部分为hinge loss,yi代表每个的label
例如,φ(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部分.
你也检查这个 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。
因为我可以在 linked 图片中找到等式的剩余部分或其他部分的 python 代码。使用这个等式可以很容易地计算铰链损失部分 -
import keras
keras.losses.hinge(y_true, y_pred)
如果您需要进一步的帮助,请发表评论了解详情。
您的屏幕截图显示了整个 objective 函数,但只有 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,所以我真的不知道发生了什么 –我想这是一个比您屏幕截图中显示的模型更复杂的模型。
无论哪种方式,你的问题的答案是正则化项是单独处理的,不属于损失函数(损失函数的签名给了我们提示也是:没有 w
参数传递给它——只有 y_true
和 y_pred
).
请检查这个 link 的等式并将其转换为一个简单的 keras 模型的 python 损失函数。
EQUATION PICTURE OR IMAGE LINK FOR CONVERTING IT TO PYTHON'S KERAS REQUIRED LOSS EQUATION
其中图中方程的max部分或curve selected部分为hinge loss,yi代表每个的label 例如,φ(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部分.
你也检查这个 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。 因为我可以在 linked 图片中找到等式的剩余部分或其他部分的 python 代码。使用这个等式可以很容易地计算铰链损失部分 -
import keras
keras.losses.hinge(y_true, y_pred)
如果您需要进一步的帮助,请发表评论了解详情。
您的屏幕截图显示了整个 objective 函数,但只有 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,所以我真的不知道发生了什么 –我想这是一个比您屏幕截图中显示的模型更复杂的模型。
无论哪种方式,你的问题的答案是正则化项是单独处理的,不属于损失函数(损失函数的签名给了我们提示也是:没有 w
参数传递给它——只有 y_true
和 y_pred
).