Доступ к значениям градиента выходных данных модели keras по отношению к входам

Я сделал довольно простую модель NN, чтобы сделать некоторые нелинейные регрессии для меня в Keras, как введение. Я загрузил свой jupyter notebookit как сущность здесь (правильно относится к github), что довольно коротко и точно.

Он просто соответствует 1D-функции y = (x – 5) ^ 2/25.

Я знаю, что Theano и Tensorflow – это, по сути, графические производные (градиентные) рамки. И главным образом это использование градиентов функций потерь по отношению к весам для градиентной пошаговой оптимизации.

Но я пытаюсь понять, есть ли у меня доступ к чему-то, что, учитывая обученную модель, может аппроксимировать производные от входных данных относительно уровня вывода для меня (а не функции веса или потери). Поэтому для этого случая я бы хотел, чтобы y '= 2 (x-5) / 25.0 оценивался по графику производной сети для меня для указанного значения ввода x в текущем состоянии сети.

У меня есть какие-либо варианты в API-интерфейсах Keras или Anano / TF, чтобы сделать это, или мне нужно как-то сделать свое собственное управление цепочкой с весами (или, возможно, добавить свои собственные не обучаемые «идентичные» слои или что-то еще)? В моей записной книжке вы можете видеть, как я пытаюсь несколько подходов, основанных на том, что я смог найти до сих пор, но без тонны успеха.

Чтобы сделать его конкретным, у меня есть рабочая модель keras со структурой:

model = Sequential() # 1d input model.add(Dense(64, input_dim=1, activation='relu')) model.add(Activation("linear")) model.add(Dense(32, activation='relu')) model.add(Activation("linear")) model.add(Dense(32, activation='relu')) # 1d output model.add(Dense(1)) model.compile(loss='mse', optimizer='adam', metrics=["accuracy"]) model.fit(x, y, batch_size=10, epochs=25, verbose=0, validation_data=(x_test, y_test)) 

Я хотел бы оценить производную от вывода y по отношению к входу x на, скажем, x = 0,5.

Все мои попытки извлечь значения градиента, основанные на поиске прошлых ответов, привели к синтаксическим ошибкам. С точки зрения высокого уровня, является ли это поддерживаемой функцией Keras, или любое решение будет специфичным для бэкэнд?

One Solution collect form web for “Доступ к значениям градиента выходных данных модели keras по отношению к входам”

Как вы уже упоминали, Theano и TF символичны, поэтому сделать производную нужно довольно просто:

 import theano import theano.tensor as T import keras.backend as K J = T.grad(model.output[0, 0], model.input) jacobian = K.function([model.input, K.learning_phase()], [J]) 

Сначала вы вычисляете символический градиент (T.grad) выходного сигнала, заданного на входе, затем вы создаете функцию, которую вы можете вызвать и выполняет вычисление. Обратите внимание, что иногда это не так тривиально из-за проблем с формой, так как вы получаете по одной производной для каждого элемента ввода.

  • Keras использует слишком много памяти GPU при вызове train_on_batch, fit и т. Д.
  • Keras train_on_batch потеря / точность 0
  • Как использовать keras для XOR
  • Как проверить структуру нейронной сети в модели keras?
  • Потеря NaN при тренировке регрессионной сети
  • Получить метки классов из функциональной модели Keras
  • Использование Keras & Tensorflow с графическим процессором AMD
  • Как загрузить модель из файла HDF5 в Keras?
  • Python - лучший язык программирования в мире.