![](/img/trans.png)
[英]How can I get the gradient of the loss w.r.t. model prediction in Tensorflow?
[英]Hinge loss function gradient w.r.t. input prediction
对于一项作业,我必须同时实现铰链损耗及其偏导数计算功能。 我得到了铰链损失函数本身,但是我很难理解如何计算其偏导数wrt预测输入。 我尝试了不同的方法,但没有任何效果。
任何帮助,提示,建议将不胜感激!
这是铰链损失函数本身的解析表达式:
这是我的Hinge损失函数实现:
def hinge_forward(target_pred, target_true):
"""Compute the value of Hinge loss
for a given prediction and the ground truth
# Arguments
target_pred: predictions - np.array of size `(n_objects,)`
target_true: ground truth - np.array of size `(n_objects,)`
# Output
the value of Hinge loss
for a given prediction and the ground truth
scalar
"""
output = np.sum((np.maximum(0, 1 - target_pred * target_true)) / target_pred.size)
return output
现在我需要计算这个梯度:
这是我尝试进行的铰链损耗梯度计算:
def hinge_grad_input(target_pred, target_true):
"""Compute the partial derivative
of Hinge loss with respect to its input
# Arguments
target_pred: predictions - np.array of size `(n_objects,)`
target_true: ground truth - np.array of size `(n_objects,)`
# Output
the partial derivative
of Hinge loss with respect to its input
np.array of size `(n_objects,)`
"""
# ----------------
# try 1
# ----------------
# hinge_result = hinge_forward(target_pred, target_true)
# if hinge_result == 0:
# grad_input = 0
# else:
# hinge = np.maximum(0, 1 - target_pred * target_true)
# grad_input = np.zeros_like(hinge)
# grad_input[hinge > 0] = 1
# grad_input = np.sum(np.where(hinge > 0))
# ----------------
# try 2
# ----------------
# hinge = np.maximum(0, 1 - target_pred * target_true)
# grad_input = np.zeros_like(hinge)
# grad_input[hinge > 0] = 1
# ----------------
# try 3
# ----------------
hinge_result = hinge_forward(target_pred, target_true)
if hinge_result == 0:
grad_input = 0
else:
loss = np.maximum(0, 1 - target_pred * target_true)
grad_input = np.zeros_like(loss)
grad_input[loss > 0] = 1
grad_input = np.sum(grad_input) * target_pred
return grad_input
我已经设法通过使用np.where()函数解决了这个问题。 这是代码:
def hinge_grad_input(target_pred, target_true):
"""Compute the partial derivative
of Hinge loss with respect to its input
# Arguments
target_pred: predictions - np.array of size `(n_objects,)`
target_true: ground truth - np.array of size `(n_objects,)`
# Output
the partial derivative
of Hinge loss with respect to its input
np.array of size `(n_objects,)`
"""
grad_input = np.where(target_pred * target_true < 1, -target_true / target_pred.size, 0)
return grad_input
对于y * y <1的所有情况,基本上,梯度等于-y / N。否则为0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.