Попытка подготовить CSV для модели keras с набором данных tenorflow - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть готовая модель keras CNN, которая ожидает [None, 20,20,3] массивы в качестве входных данных.(Размер изображения здесь 20 ...) С другой стороны у меня есть CSV с 1200 (20 * 20 * 3) столбцами, готовыми в моем облачном хранилище.

Я хочу написать ETL-конвейер с тензорным потокомполучить тензор формы [20,20,3] для каждой строки в CSV.

Мой код до сих пор:

Я уже потратил несколько дней работы и уверен, что этот подход можетпотренируйся в конце.

import tensorflow as tf

BATCH_SIZE = 30

tf.enable_eager_execution()

X_csv_path = 'gs://my-bucket/dataX.csv'


X_dataset = tf.data.experimental.make_csv_dataset(X_csv_path, BATCH_SIZE, column_names=range(1200) , header=False)
X_dataset = X_dataset.map(lambda x: tf.stack(list(x.values())))

iterator = X_dataset.make_one_shot_iterator()
image = iterator.get_next()

Я ожидал бы иметь форму [30,1200], но я все равно получаю 1200 тензор формы [30].Моя идея состоит в том, чтобы прочитать каждую строку в тензор в форме [1200], а затем преобразовать ее в тензор [20,20,3], чтобы снабдить мою модель.Спасибо за ваше время!

1 Ответ

0 голосов
/ 28 апреля 2019

tf.data.experimental.make_csv_dataset создает OrderedDict массивов столбцов.Для вашей задачи я бы использовал tf.data.TextLineDataset.

def parse(filename):
    string = tf.strings.split([filename], sep=',').values
    return string

dataset = tf.data.TextLineDataset('sample.csv').map(parse).batch(BATCH_SIZE)
for i in dataset:
    print(i)

Это выведет тензор формы (BATCH_SIZE, row_length), где row_length - это строка из CSV-файла.Вы можете применить любую дополнительную предварительную обработку, в зависимости от вашей задачи

...