2017-10-03 1 views
1

Je crée une fonction keras personnalisée (pour les couches lambda ou des fonctions de perte) qui à un moment donné doit obtenir la valeur d'un tenseur trainable comme une constante.Keras - Copier tenseur comme non trainable

Il est pour une normalisation expérimentale d'un var. Je veux qu'il soit 1, mais il devrait continuer à se mettre à jour pendant la formation.

def normFunc(inputTrainableTensor): 

    #I want this function - here in pseudocode: 
    nonTrainableVersion = K.make_a_non_trainable_copy(inputTrainableTensor) 

    return inputTrainableTensor/nonTrainableVersion 

En termes de produits dérivés, ce qui équivaut à anyConstant * inputTrainableTensor

Répondre

0

Vous pouvez le faire en utilisant la méthode K.stop_gradient() du keras backend.

import keras.backend as K 

def customLoss(yTrue,yPred): 
    return yPred/K.stop_gradient(yPred) 

Cette fonction de perte entraînera une perte de valeur qui est constamment 1 à toutes les époques, même si, le modèle gardera la formation et éventuellement apporter yPred à 0 et continuer à le faire avec yPred négatif.