Я пытаюсь получить градиенты из модели керас. Бэкэнд-функция 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, т.е. без сессий? Существует альтернативный метод, описанный здесь . Однако я не понимаю, почему необходимо давать какой-то явный вывод для оценки градиентов и как заставить решение работать без этих выводов.