无法从tensorflow/keras中的加载模型获取坡度

2024-05-04 04:37:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个预先训练的模型,我加载它,它有效地工作(即,我可以作出预测)。我想得到某个参数的模型梯度,但是我无法得到任何有意义的结果。总是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。我做错什么了?如何得到给定模型的梯度?在


Tags: to模型testnoneconverttfhatnp
1条回答
网友
1楼 · 发布于 2024-05-04 04:37:29

对于您当前的代码,tensorflow无法将x连接到loss的计算图,因为loss是从numpy数组(y_hat)创建的,x也只是一个numpy数组。以下代码应该起作用:

tf_x = tf.convert_to_tensor(x, dtype=np.float32)
loss = tf.keras.losses.binary_crossentropy(tf_y, model2(tf_x))
grad, = K.gradients(loss, tf_x)

相关问题 更多 >