喀拉拉邦三元组丢失的实现精度

问题描述 投票:2回答:2

我想为三重态损失网络实现精度功能,以便我知道算法在训练过程中如何工作。到目前为止,我已经尝试过一些东西,但是我不确定它是否真的可以工作,而且在keras中实现它也有麻烦。我的想法是比较预测的锚定正距和锚定负距(在y_pred中),以便正距应足够小,负距应足够大:

def accuracy(_, y_pred):
    pos_treshold = 0.4
    neg_treshold = 0.6
    return K.mean(y_pred[0] < pos_treshold and y_pred[1] > neg_treshold)

问题在于,我无法弄清楚如何在keras中实现此and条件。

然后,我试图找到关于三重态损失的准确性这一话题。一种实现方式是将精度定义为三元组数量的比例,其中,锚图像和正图像之间的预测距离小于锚图像和负图像之间的预测距离。有了这个,我在keras中实现它还有更大的问题。

我尝试了这个(尽管我不知道它是否符合我的描述):

K.mean(y_pred[0] < y_pred[1])

这使我始终保持0.5左右的准确性(可能是一些随机的东西)。所以我仍然不知道该模型是坏的还是准确性函数是坏的。

所以我的问题是如何在keras中实现任何合理的精度函数?我不在乎这是否是这两个之一。

python neural-network keras evaluation loss-function
2个回答
0
投票

这就是我所使用的(条件y_pred [0] mean,因此它将支持样本权重。

def triplet_accuracy(_, y_pred):
    '''
        Input:  y_pred shape is (batch_size, 2)
                [pos, neg]
        Output: shape (batch_size, 1)
                loss[i] = 1 if y_pred[i, 0] < y_pred[i, 1] else 0
    '''

    subtraction = K.constant([-1, 1], shape=(2, 1))
    diff =  K.dot(y_pred, subtraction)
    loss = K.maximum(K.sign(diff), K.constant(0))

    return loss

0
投票

您能够找到您的准确性问题的答案吗?让我知道你是否有,因为我也确实需要帮助

© www.soinside.com 2019 - 2024. All rights reserved.