это простой обходной путь для передачи дополнительных переменных в вашу функцию потерь. в нашем случае мы передаем скрытый вывод одного из наших слоев (x1). этот вывод можно использовать для выполнения каких-либо действий внутри функции потерь (я выполняю фиктивную операцию)
def mse(y_true, y_pred, hidden):
error = y_true-y_pred
return K.mean(K.sqrt(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.summary()
history = m.fit([X, y], y, epochs=10)
## final fitted model to compute predictions
final_m = Model(inp, out)