我是否需要使用后端功能自定义Keras丢失

时间:2019-07-20 04:03:44

标签: python tensorflow keras loss-function

我想用 Keras 实现此paper中所示的自定义损失函数。

我的损失并没有减少,我感觉是因为损失的实现:它并没有将 Keras的后端用于所有内容,而是结合了一些{{ 1}}函数,简单操作和K

numpy

是否有必要使用Keras函数,如果需要的话,我需要使用哪种类型的操作(我看到了一些代码,其中简单的操作(例如加法)不使用def l1_matrix_norm(M): return K.cast(K.max(K.sum(K.abs(M), axis=0)), 'float32') def reconstruction_loss(patch_size, mask, center_weight=0.9): mask = mask.reshape(1, *mask.shape).astype('float32') mask_inv = 1 - mask def loss(y_true, y_pred): diff = y_true - y_pred center_part = mask * diff center_part_normed = l1_matrix_norm(center_part) surr_part = mask_inv * diff surr_part_normed = l1_matrix_norm(surr_part) num_pixels = np.prod(patch_size).astype('float32') numerator = center_weight * center_part_normed + (1 - center_weight) * surr_part_normed return numerator / num_pixels return loss )。

如果我必须使用Keras后端功能,我可以改为使用TensorFlows功能吗?

1 个答案:

答案 0 :(得分:1)

NN训练取决于能够计算图中所有函数(包括损失函数)的导数。注释Keras后端函数和TensorFlow函数,以便tensorflow(或其他后端)自动知道如何计算梯度。 numpy函数不是这种情况。如果您确实知道如何手动计算其梯度,则可以使用非tf函数(请参见tf.custom_gradients)。通常,我建议最好坚持使用后端函数,然后在必要时使用tensorflow函数。