Реализовать управляемый BackProp в TensorFlow 2.0?

Я пытаюсь применить управляемое обратное распространение (https://arxiv.org/abs/1412.6806) с помощью TensorFlow 2.0. Чтобы применить управляемое обратное распространение, нам нужно изменить градиенты relu. Я прочитал беседу в Как применить управляемый BackProp в Tensorflow 2.0? и попытался адаптировать код из https://gist.github.com/falcondai/561d5eec7fed9ebf48751d124a77b087, однако результаты не такие, как я ожидал. Я не уверен, что мне не хватает.

Вот что у меня есть (объединяющий код из источников выше):

import tensorflow as tf

@tf.RegisterGradient("GuidedRelu")
def _GuidedReluGrad(op, grad):
    dtype = op.inputs[0].dtype
    gate_f = tf.cast(op.outputs[0] > 0, dtype) #for f^l > 0
    gate_R = tf.cast(grad > 0, dtype) #for R^l+1 > 0
    return gate_f * gate_R * grad

with tf.compat.v1.get_default_graph().gradient_override_map({'Relu': 'GuidedRelu'}):
    with tf.GradientTape() as tape:
        x = tf.constant([10., 2.])
        tape.watch(x)
        y = tf.nn.relu(x)
        z = tf.reduce_sum(-y ** 2)
        print(x.numpy())
        print(y.numpy())
        print(z.numpy())
        print(tape.gradient(z, x).numpy())

На выходе

[10.  2.]
[10.  2.]
-103.99999
[-20.  -4.]

Вместо того

[10.  2.]
[10.  2.]
-103.99999
[0.  0.]

person raplima    schedule 28.10.2019    source источник
comment
Привет, у меня такая же проблема. Вы это решили?   -  person Abhijit Balaji    schedule 15.04.2020
comment
Привет, я больше не работал над этой темой, поэтому у меня нет обновлений по ней. Возможно, ответ @ L3Robot ниже поможет, особенно этот комментарий.   -  person raplima    schedule 16.04.2020


Ответы (1)


Похоже, что в tf2.0 / 2.1 нет чистого способа сделать это. Обходной путь, который я использовал, - это изменить мою модель, изменив ReLU с помощью пользовательского ReLU, который использует @custom_gradient. Меня вдохновил этот поток . Это немного медленно, но, по крайней мере, работает. TF обязательно будет обновлен, чтобы снова поддерживать переназначение градиента. Надеюсь, это поможет вам тем временем.

Изменить: проблема с обсуждением этой проблемы здесь.

person L3Robot    schedule 31.01.2020
comment
Спасибо! Я предполагаю, что, основываясь на этом ответе, ваш подход является рекомендуемым. - person raplima; 16.04.2020