带有TF后端的Keras:获得与输入相关的输出梯度

时间:2017-11-01 21:44:16

标签: tensorflow keras

我有一个非常简单的Keras MLP,我试图获得输出相对于输入的梯度。

我使用以下代码:

regressor = Sequential([
    Dense(32, input_shape=(n_features,), activation='relu'),
    Dense(1)
])
regressor.compile(optimizer=SGD(lr=0.1), loss='mse')

regressor.fit(x, y)

output_tens = regressor.layers[-1].output
input_tens = regressor.layers[0].input

grad = tf.gradients(output_tens, input_tens)
with tf.Session() as sess:
    sess.run(grad, feed_dict={input_tens: np.zeros((1, n_features))})

失败并出现以下错误

FailedPreconditionError: Attempting to use uninitialized value dense_7/bias
     [[Node: dense_7/bias/read = Identity[T=DT_FLOAT, _class=["loc:@dense_7/bias"], _device="/job:localhost/replica:0/task:0/cpu:0"](dense_7/bias)]]

(堆栈跟踪很长,我认为,信息量不大,所以我不在这里添加它。)

我的方法基本正确吗?我有什么特别的事吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要获得keras会话才能使其正常运行:

import keras.backend as K

with K.get_session() as sess:
    sess.run(grad, feed_dict={input_tens: np.zeros((1, n_features))})

当您实例化新会话时 - 您没有从keras培训中初始化变量。