Как я могу получить входной градиент в Керасе? - PullRequest
0 голосов
/ 01 марта 2020

Я создаю собственную реализацию нейронной сети. Я использую Keras для тестирования, чтобы убедиться, что градиенты, вычисленные моей реализацией, соответствуют градиентам Keras. Благодаря этому ответу Как получить градиенты в керасах? Мне удалось сравнить веса и выходные градиенты. Однако я также хотел бы сравнить градиенты для ВХОДОВ. Моя модель Keras - это всего лишь один плотный слой.

model = Sequential()
model.add(Dense(output_size,
                use_bias=bias,
                input_shape=(input_size,),
                activation=activation_name))
model.compile(optimizer="sgd", loss=loss_function_name)

...

model.evaluate(x, y)

Как получить градиенты по отношению к x?

1 Ответ

0 голосов
/ 01 марта 2020

Кажется, что вы хотите получить градиент функции потерь по отношению к входным данным (а не весам, как это обычно бывает). Вы можете использовать tf.GradientTape() для достижения этой конкретной задачи. Вот пример реализации, на которую я ссылался из учебника TensorFlow , с минимальным количеством правок в коде в соответствии с вашей ситуацией:

loss_object = tf.keras.losses.CategoricalCrossentropy() # Can be any loss function

model = tf. keras.applications.MobileNetV2(include_top=True, weights='imagenet') # Can be any model

def compute_gradient(input, input_label):
  with tf.GradientTape() as tape:
    tape.watch(input)
    prediction = model(input)
    loss = loss_object(input_label, prediction)
  gradient = tape.gradient(loss, input)
  return gradient

Для получения дополнительной информации о том, как использовать tf.GradientTape(), обратитесь к официальная документация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...