2

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.

1 Answer 1

2

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)
0

Not the answer you're looking for? Browse other questions tagged or ask your own question.