Я пытаюсь реализовать метод проекции градиента из Снижение нежелательных предубеждений с помощью состязательного обучения
Архитектура модели:
- 1) Входной слой
- 2) Плотный слой фиксированной длины
- 3) Пользовательский градиентный слой проекта
- 4a) Задание 1 слоя
- 4b) Задание 2 слоя (состязательное задание)
Я бы хотел управлять градиентами из задачи 1 и задачи 2 с помощью пользовательского слоя (3). В настоящее время я планирую сделать что-то подобное в вызове пользовательского слоя
@tf.RegisterGradient('blah')
def proj_gradients(op, grad):
return grad[0] - grad[1]
g = K.get_session().graph
with g.gradient_override_map({'Identity': 'blah'}):
y = tf.identity(X)
Есть ли более интуитивный способ Keras сделать это?