Чтение LZO-сжатых CSV-файлов в тензорном потоке - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть коллекция CSV-файлов, сжатых в формате LZO, которые я хочу импортировать в TensorFlow. Однако, если я попытаюсь прочитать его так же, как прочитанный несжатый файл, то есть, используя

def parse_csv(line):
    columns = tf.decode_csv(line, record_defaults=DEFAULTS, field_delim="\t", use_quote_delim=False)  # take a line at a time
    features = dict(zip(COLUMNS, columns))  # create a dictionary out of the features
    labels = tf.to_int32(features.pop('label'))  # define the label as an integer
    return features, labels

data_files = glob.glob("my/folder/*")
dataset = tf.data.TextLineDataset(data_files)
dataset = dataset.map(parse_csv)

где DEFAULTS и COLUMNS были определены ранее, я получаю ошибку

tensorflow.python.framework.errors_impl.InvalidArgumentError: Expect 20 fields but have 1 in record 0

Чтобы обойти это, я попытался как определить tf.WholeFileReader, так и использовать функцию tf.read_file, а затем передать их выходные данные функции decompress в пакете python-lzo, но безрезультатно. Я подозреваю, что там много ошибок: по крайней мере, одна в том, как я использую функцию read_file, потому что я не уверен, что я очень хорошо ориентируюсь в структурах данных TF, и одна в decompress, потому что я действительно не понимаю как работает LZO.

data_files = glob.glob("my/folder/*")
file_queue = tf.train.string_input_producer(data_files)
value = tf.read_file(file_queue.dequeue())
value = tf.map_fn(lzo.decompress, value)
dataset = tf.map_fn(parse_csv, value)

Я получаю следующую ошибку:

tensorflow.python.framework.errors_impl.InvalidArgumentError: slice index 0 of dimension 0 out of bounds. for 'map/strided_slice' (op: 'StridedSlice') with input shapes: [0], [1], [1], [1] and with computed input tensors: input[1] = <0>, input[2] = <1>, input[3] = <1>.

Не могли бы вы указать мне, что не так и как я могу решить эту проблему?

...