У меня есть нейронная сеть с несколькими входами Keras, в которой я хочу рассчитать градиент выхода относительно одного из промежуточных слоев.Слой, который я выбрал, находится внутри одной из моих последовательных моделей, которая обрабатывает один из двух входов в модель.
Но когда я пытаюсь вычислить градиент по отношению к этому слою, я получаю [None]
, возвращаемое в качестве вывода.Я могу взять градиент для других слоев, таких как слой сцепления, но не для всех слоев в моих 2 ветвях.Могу ли я взять градиент этого слоя, учитывая, что он находится в последовательной оболочке моей модели?
Вот код, который показывает, что я пытаюсь сделать.
from keras.models import Sequential, Model
from keras.layers import Dense, Input, concatenate
import keras.backend as K
# Init branch 1
branch1 = Sequential()
branch1.add(Dense(64, activation='relu', input_shape=(1000,)))
branch1.add(Dense(32, activation='relu'))
# Init branch 2
branch2 = Sequential()
branch2.add(Dense(16, activation='relu', input_shape=(500,)))
branch2.add(Dense(8, activation='relu'))
branch1_input = Input(shape=(1000,))
branch1_out = branch1(branch1_input)
branch2_input = Input(shape=(500,))
branch2_out = branch2(branch2_input)
# Combine
x = concatenate([branch1_out, branch2_out])
out = Dense(1)(x)
# Create model
model = Model(inputs=[branch1_input, branch2_input], outputs=out)
layer = model.get_layer('sequential_1').get_layer('dense_2')
grads = K.gradients(model.output, layer.output)
print(grads) # prints out [None]