无法从tensorflow / keras中的加载模型中获得渐变

时间:2019-01-29 23:35:33

标签: python tensorflow keras gradient

我有一个预先训练的模型,可以加载并且可以有效地工作(即我可以做出预测)。我想获取某个参数的模型梯度,但是我无法获得任何有意义的结果。始终是None输出。

我的代码:

sess = tf.Session()
K.set_session(sess)

x = X_test[0].reshape(1,100)
y = np.reshape(Y_test[0], (1,1))
tf_y = tf.convert_to_tensor(y,dtype=np.float32)

model2 = ClassificationModel(config, logging).model
model2.load_weights("class_models/model.382-0.46-0.87.h5")

# predict real x_test
y_hat = model2.predict(x)
tf_y_hat = tf.convert_to_tensor(y_hat, dtype=np.float32)

loss = keras.losses.binary_crossentropy(tf_y,tf_y_hat)
grad, = K.gradients(loss,x)

print(grad)

我得到的打印输出是None。我究竟做错了什么?如何根据给定的模型获得渐变?

1 个答案:

答案 0 :(得分:1)

使用您当前的代码,张量流无法将x连接到loss的计算图,因为loss是从一个numpy数组(y_hat)和{{1}创建的}也是一个numpy数组。可以使用以下代码代替:

x