在Keras神经网络中可以在顺序模型中计算层的梯度吗?

时间:2019-03-08 21:34:05

标签: python tensorflow keras neural-network

我有一个多输入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]

0 个答案:

没有答案