Как получить оцененные градиенты из модели керас с использованием tenorflow 2? - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь получить градиенты из модели керас. Бэкэнд-функция keras.backend.gradients создает символическую функцию, которую необходимо оценивать на каком-то конкретном входе. Следующий код работает для этой проблемы, но он использует старые сеансы тензорного потока и, в частности, feed_dict.

import numpy as np
import keras
from keras import backend as K
import tensorflow as tf

model = keras.Sequential()
model.add(keras.layers.Dense(16, activation='relu', input_shape = (49, )))
model.add(keras.layers.Dense(11, activation='softmax'))
model.compile(optimizer='rmsprop', loss='mse')

trainingExample = np.random.random((1, 49))


gradients = K.gradients(model.output, model.trainable_weights)

sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())

evaluated_gradients = sess.run(gradients,\
                               feed_dict={model.input:trainingExample})
sess.close()

Как мне переписать это в стиле tenorflow 2, т.е. без сессий? Существует альтернативный метод, описанный здесь . Однако я не понимаю, почему необходимо давать какой-то явный вывод для оценки градиентов и как заставить решение работать без этих выводов.

1 Ответ

0 голосов
/ 20 октября 2019

В тензорном потоке-2 вы можете очень легко получить градиенты с помощью градиента tf.GradientTape ().

Я цитирую официальный учебный код здесь -

@tf.function
def train_step(images, labels):
  with tf.GradientTape() as tape:
    predictions = model(images)
    loss = loss_object(labels, predictions)
  gradients = tape.gradient(loss, model.trainable_variables)
  optimizer.apply_gradients(zip(gradients, model.trainable_variables))

  train_loss(loss)
  train_accuracy(labels, predictions) 

вы можете найти полныйучебник на официальном сайте tenorflow - https://www.tensorflow.org/tutorials/quickstart/advanced

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