Search code examples
pythontensorflowmachine-learningkerasloss-function

How to use tensorflow custom loss for a keras model?


I'm trying to implement a loss function by using the representations of the intermediate layers. As far as I know, the Keras backend custom loss function only accepts two input arguments(y_ture, and y-pred). How can I define a loss function with @tf.function and use it for a model that has been defined via Keras? any help would be appreciated.


Solution

  • this a simple workaround to pass additional variables to your loss function. in our case, we pass the hidden output of one of our layers (x1). this output can be used to do something inside the loss function (I do a dummy operation)

    def mse(y_true, y_pred, hidden):
        error = y_true-y_pred
        return K.mean(K.square(error)) + K.mean(hidden)
    
    
    X = np.random.uniform(0,1, (1000,10))
    y = np.random.uniform(0,1, 1000)
    
    inp = Input((10,))
    true = Input((1,))
    x1 = Dense(32, activation='relu')(inp)
    x2 = Dense(16, activation='relu')(x1)
    out = Dense(1)(x2)
    
    m = Model([inp,true], out)
    m.add_loss( mse( true, out, x1 ) )
    m.compile(loss=None, optimizer='adam')
    m.fit(x=[X, y], y=None, epochs=3)
    
    ## final fitted model to compute predictions
    final_m = Model(inp, out)