Импортировать строку CSV как массив в тензорном потоке

У меня есть CSV-файл, содержащий большое количество N из столбцов: первый столбец содержит метку, другой N-1 числовое представление моих данных (функции Chroma из записи музыки).

Моя идея состоит в том, чтобы представить входные данные в виде массива. На практике я хочу эквивалент стандартного представления данных в компьютерном зрении. Так как мои данные хранятся в CSV, внутри определения функции ввода данных мне нужен анализатор CSV. Я делаю это таким образом

def parse_csv(line):
    columns = tf.decode_csv(line, record_defaults=DEFAULTS)  # take a line at a time
    features = {'songID': columns[0], 'x': columns[1:]}  # create a dictionary out of the features
    labels = features.pop('songID')  # define the label
    return features, labels


def train_input_fn(data_file=fp, batch_size=128):
    """Generate an input function for the Estimator."""

    # Extract lines from input files using the Dataset API.
    dataset = tf.data.TextLineDataset(data_file)
    dataset = dataset.map(parse_csv)
    dataset = dataset.shuffle(1_000_000).repeat().batch(batch_size)
    return dataset.make_one_shot_iterator().get_next()

Однако это возвращает ошибку, которая не очень значима: AttributeError: 'list' object has no attribute 'get_shape', Я знаю, что виновником является определение x внутри словаря функций, но я не знаю, как это исправить, потому что, по сути, я пока не очень понимаю структуры данных тензорного потока.

2 ответа

Решение

Как оказалось, особенности должны быть тензорами. Тем не менее, каждый столбец является тензор сам по себе и принимая columns[1:] приводит к списку тензоров. Для создания многомерного тензора, который хранит информацию из N-1 столбцы следует использовать tf.stack:

features = {'songID': columns[0], 'x': tf.stack(columns[1:])}  # create a dictionary out of the features

tf.stack должен решить.

Полный пример кода доступен в следующей теме.

Tensorflow Python читает 2 файла

Другие вопросы по тегам