«ValueError: обнаружен объект SparseTensorValue, который не может быть декодирован с помощью ListColumnRepresentation» при работе с Tensorflow Transform / Beam - PullRequest
1 голос
/ 15 июня 2019

Я использую преобразование тензорного потока / конвейер лучей для загрузки / предварительной обработки и сохранения в TFRecords. Эти записи затем загружаются. Во время предварительной обработки в Tensorflow Transform я хочу заполнить разреженный тензор. Таким образом, я хочу преобразовать его в плотный, дополнить его и преобразовать обратно в разреженный.
Код выглядит примерно так:

import tensorflow_transform as tft
import tensorflow as tf

#...
def preprocess_fn(input_features):
    output_features = {}
    output_features[CATEGORICAL_FEATURE_NAMES] = tft.compute_and_apply_vocabulary(...)
    #dense = tf.sparse.to_dense(output_features[CATEGORICAL_FEATURE_NAMES])
    ## do something with dense
    #output_features[CATEGORICAL_FEATURE_NAMES] = tf.contrib.layers.dense_to_sparse(dense)

    return output_features

Для загрузки TFRecords я использую следующую функцию:

def tfrecords_input_fn(files_name_pattern, transformed_metadata,
                       mode=tf.estimator.ModeKeys.EVAL,
                       num_epochs=1,
                       batch_size=64):
    dataset = tf.data.experimental.make_batched_features_dataset(
        file_pattern=files_name_pattern,
        batch_size=batch_size,
        features=transformed_metadata.schema.as_feature_spec(),
        reader=tf.data.TFRecordDataset,
        num_epochs=num_epochs,
        shuffle=True if mode == tf.estimator.ModeKeys.TRAIN else False,
        shuffle_buffer_size=1 + (batch_size * 2),
        prefetch_buffer_size=1,
        drop_final_batch=True
    )

    iterator = dataset.make_one_shot_iterator()
    features = iterator.get_next()
    target = features.pop(TARGET_FEATURE_NAME)

    return features, target

Запуск всего конвейера (загрузка необработанных данных, преобразование, сохранение TFRecords, а затем загрузка их, чтобы просто напечатать их на экран) работает нормально, но раскомментирование двух строк в preprocess_fn приводит к следующим ошибкам:

Файл "... / lib / python3.6 / site-packages / tenorflow_transform / impl_helper.py", строка 262, в to_instance_dicts поднять ValueError ('Обнаружен объект SparseTensorValue, который не может быть' ValueError: Обнаружен объект SparseTensorValue, который не может быть декодирован с помощью ListColumnRepresentation.

...

ValueError: Обнаружен SparseTensorValue, который не может быть декодирован с помощью ListColumnRepresentation. [во время выполнения «% s - Transform / ConvertAndUnbatch»]

У кого-нибудь есть советы по поводу этого кода или какие-либо подсказки по тому, что я пропустил? Любая помощь очень ценится!

Лучший, Dominik

1 Ответ

0 голосов
/ 15 июня 2019

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

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