簡體   English   中英

我是否需要使用后端功能自定義Keras丟失

[英]Do I need to use backend function for a custom Keras loss

我想用Keras實現本文顯示的自定義損失函數。

我的損失並沒有減少,我感覺是因為損失的實現:它不使用Keras的后端進行所有操作,而是結合了一些K函數,簡單操作和numpy

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函數,如果需要,我需要哪種類型的操作(我看到了一些代碼,其中簡單的操作(例如加法)不使用K )。

另外,如果我必須使用Keras后端函數,可以改為使用TensorFlows函數嗎?

NN訓練取決於能夠計算圖中所有函數(包括損失函數)的導數。 注釋Keras后端函數和TensorFlow函數,以便tensorflow(或其他后端)自動知道如何計算梯度。 numpy函數不是這種情況。 如果您確實知道如何手動計算其梯度,則可以使用非tf函數(請參閱tf.custom_gradients )。 一般來說,我建議最好堅持使用后端功能,然后在必要時再使用tensorflow功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM