Невозможно получить градиенты от загруженной модели в tenorflow / keras - PullRequest
0 голосов
/ 30 января 2019

У меня есть предварительно обученная модель, которую я загружаю, и она эффективно работает (т.е. я могу делать прогнозы).Я хочу получить градиенты модели для определенного параметра, однако мне не удается получить сколько-нибудь значимые результаты.Всегда вывод 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 голосов
/ 30 января 2019

С вашим текущим кодом тензор потока не может соединить 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...