实现自定义精度作为损失函数

时间:2019-12-17 13:17:17

标签: tensorflow keras loss-function tf.keras

我正在尝试更改用于训练图像质量评估CNN的损失函数,以查看结果是否更好

对于每个输入图像,模型输出均为10个值,这些值应代表质量为1 / 10、2 / 10,...,10/10的图像的百分比

要评估模型,我有多个指标,其中之一是自定义的两级准确性。给定每个图像的预测值和真实值10,通过检查两种情况下它们的加权平均值之和(大于或小于5)来比较它们的加权平均值之和(基本上获得平均值)。

tensorflow之外的代码非常简单:

def compute_wms(y):
    # Numpy vector of weights
    w = np.arange(1,11).astype('float32')
    w = np.reshape(w, (10,1))

    # wms of y by w
    return np.dot(y, w)

def custom_accuracy(y, y_first):

    # Compute the wms of both y and y_first
    y_wms = compute_wms(y)
    y_first_wms = compute_wms(y_first)

    # Are the obtained values greater than 5?
    y_true_bool = np.greater(y_wms, 5)
    y_pred_bool = np.greater(y_first_wms, 5)

    # The results of the previous tests are compared for each image 
    matches = np.equal(y_true_bool, y_pred_bool).astype('float32')

    # The mean of the previous tests is returned
    return np.mean(matches)

当我尝试将代码转换为Tensorflow的损失函数时,问题就来了。简单地将numpy更改为Keras后端是行不通的,因为至少一个函数不可区分。我试图在网上寻找一些建议,但是建议很多,但我敢肯定,“更大”和“相等”的功能是有问题的。我看到例如类似的question,即使我使用建议的“更大”(btw不会返回布尔值)功能,最后我仍将需要一个均值来比较结果,因此“等于” “功能

关于如何进行的任何建议?

0 个答案:

没有答案