我正在尝试更改用于训练图像质量评估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不会返回布尔值)功能,最后我仍将需要一个均值来比较结果,因此“等于” “功能
关于如何进行的任何建议?