model.fit с tenorflow 2.1 и tf.data.Dataset ValueError: попытка преобразовать значение TensorSpec - PullRequest
0 голосов
/ 28 февраля 2020

Я уже некоторое время использую Keras и Tensorflow 1.x, но я пытаюсь выучить и обновить до tenorflow 2.1 (особенно tf.data.Dataset s). Я могу успешно создать файл tfrecords и загрузить его, используя tf.data.TFRecordDataset. После анализа элементов и некоторой другой предварительной обработки (например, нормализации) набор данных возвращает кортеж, первым элементом которого является словарь, содержащий различные типы входных (x) тензоров, а вторым элементом является единственное значение / тензор для цели (y) значения.

Я могу обучить модель, вручную перебирая набор данных в пакетах, используя tf.GradientTape(). Однако, когда я пытаюсь обучить модель, используя model.fit, в методе call моей модели возникает первое исключение при первом использовании входных данных.

ValueError: Attempt to convert a value (TensorSpec(shape=(16, 278, 136), dtype=tf.float32, name=None)) with an unsupported type (<class 'tensorflow.python.framework.tensor_spec.TensorSpec'>) to a Tensor.

Если я распечатываю входные данные внутри метода call перед попыткой их использования он показывает тип как TensorSpe c, а не как Tensor (у меня есть несколько заполнителей в моем входном словаре на данный момент):

{
    'contextual': {'one_hot': {}, 'multi_hot': {}, 'dense': {}}, 
    'sequential': {
        'one_hot': {}, 
        'multi_hot': {}, 
        'dense': TensorSpec(shape=(16, 278, 136), dtype=tf.float32, name=None)
    }
}

Хотя Я не знаю достаточно о внутренностях Tensorflow, чтобы понять, ожидается ли это или нет.

Буду очень признателен за любые идеи о том, почему это может происходить или как это исправить.

1 Ответ

1 голос
/ 30 марта 2020

Проблема заключается в том, что Keras не может обрабатывать вложенные словари. Если вы расправляете словарь, то это устраняет ошибку. Например:

{
    'contextual_one_hot': ...,
    'contextual_multi_hot': ...,
    'contextual_dense': ...,
    'sequential_one_hot': ...,
    'sequential_multi_hot': ...,
    'sequential_one_hot': ...,
    'sequential_dense': ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...