无法从 tensorflow/keras 中加载的模型获取渐变
Can't get gradients from loaded model in tensorflow/keras
我加载了一个预训练模型,它有效地工作(即我可以做出预测)。我想获得某个参数的模型梯度,但是我无法获得任何有意义的结果。总是 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
。我究竟做错了什么?如何获得给定模型的梯度?
使用您当前的代码,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)
我加载了一个预训练模型,它有效地工作(即我可以做出预测)。我想获得某个参数的模型梯度,但是我无法获得任何有意义的结果。总是 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
。我究竟做错了什么?如何获得给定模型的梯度?
使用您当前的代码,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)