Входные данные для активной функции исполнения не могут быть символами Keras c, но найдены - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь получить якобиан моей модели со входом (sample_x, который является двоичным вектором в numpy).

print("Initiating gradient checker")
    sample_x_tensor = sample_x.toarray()
    sample_x_tensor = tf.convert_to_tensor(sample_x.toarray())
    sample_x_tensor = tf.cast(sample_x_tensor, tf.float32)

    with tf.GradientTape() as tape:
        tape.watch(sample_x_tensor)
        y_pred = model(sample_x_tensor)
        print(y_pred[0])

    jacobian = tape.jacobian(y_pred, sample_x_tensor)

Модель представляет собой простую модель двоичной классификации Keras, Keras 2.15 и Tensorflow 2. Получаем следующее исключение:

tensorflow.python.eager.core._SymbolicException: Inputs to eager execution function cannot be Keras symbolic tensors, but found [<tf.Tensor 'Reshape:0' 
shape=(1,) dtype=float32>]

Насколько я понимаю, TF2 по-прежнему готов к выполнению по умолчанию. Любая идея, как я могу исправить это?

1 Ответ

0 голосов
/ 20 апреля 2020

Использование предоставленного вами фрагмента кода и добавление двоичной классификации basi c Keras Модель.

Код, используемый для воспроизведения:

%tensorflow_version 2.x  # Using Google Colab

import tensorflow as tf  # Tensorflow 2.2.0-rc3
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential

model = Sequential()
model.add(Dense(32, input_shape = (2,)))
model.add(Dense(1, activation = 'sigmoid'))

print("Initiating gradient checker")
sample_x_tensor = tf.random.normal((100,2))
# sample_x_tensor = sample_x.toarray()
# sample_x_tensor = tf.convert_to_tensor(sample_x.toarray())
sample_x_tensor = tf.cast(sample_x_tensor, tf.float32)

with tf.GradientTape() as tape:
    tape.watch(sample_x_tensor)
    y_pred = model(sample_x_tensor)
    print(y_pred[0])

jacobian = tape.jacobian(y_pred, sample_x_tensor)

Возвращает:

Initiating gradient checker
tf.Tensor([0.38266268], shape=(1,), dtype=float32)

Он успешно выполнен, но я бы посоветовал вам несколько вещей:

  1. Проверьте вашу модель Слои и посмотрите, он обрабатывает правильные типы данных .
  2. Проверьте формы входных данных и Тип , убедитесь, что он совместим с используемыми слоями , (Tensor Datatype как можно больше)

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...