Лучший способ построения пакетного массива Numpy из значений CSV? - PullRequest
0 голосов
/ 15 октября 2019

У меня очень большой набор данных в формате CSV (500K + строки и 6500+ столбцы), который выглядит примерно так (все целочисленное значение, за которым следует приведение к float64 во время цикла пакетного импорта):

1,7930472962,92,5,2,9471037239,67,2,1...8371097814,81,2,3
2,2091185638,92,5,2,3773622239,67,2,1...8378747918,81,2,3

Таким образом, исходя из длины строк, я не могу вписать все в память, я транслирую все из CSV следующим образом:

train_dataset = tf.data.experimental.make_csv_dataset(
    sys.argv[1],
    batch_size = BATCHSIZE,
    column_names = SELECT_COLUMNS,
    column_defaults = DEFAULTS,
    label_name = LABEL_COLUMN,
    field_delim=',',
    use_quote_delim=True,
    na_value='',
    header=False,
    num_epochs=1,
    shuffle=True,
    shuffle_buffer_size=500,
    shuffle_seed=None,
    num_parallel_reads=1,
    sloppy=False,
    num_rows_for_inference=1000,
    compression_type=None,
    ignore_errors=False
)

Я получаю диктовку, которую затем могу вытянутьмассивы из этого способа:

for batch, label in train_dataset:
    for key, value in batch.items():
       print(value.numpy())

Проблема в том, что с каждой партией массивы Numpy группируют все по столбцам, в то время как мне нужно, чтобы каждая строка CSV из пакета была преобразована в ndarray, в основном несколько вложенных ndarraysиз пакета внутри ndarray, чтобы я мог сделать что-то вроде этого:

(x_train, _), (x_test, _) = loader.load_data()
train_dataset = tf.data.Dataset.from_tensor_slices(x_train)
train_dataset = train_dataset.shuffle(buffer_size=train_buf)
train_dataset = train_dataset.batch(batch_size)

Мне трудно понять переход на 2.0 espe, за которым следует операция shuffle, особенно потому, что tf.dataобеспокоен. Я думаю, что мне нужно сначала упаковать каждую строку CSV в тензорные срезы, а затем создать набор данных с помощью tf.data.Dataset.from_tensor_slices ()?

Заранее спасибо

1 Ответ

0 голосов
/ 15 октября 2019

Я бы порекомендовал вам использовать tf.data.experimental.make_csv_dataset(THECSVFILE.csv) определено здесь , а затем это тип tf.data, который можно подавать на модели, но он не заполняет вашу память, однако, если вы перетасуетевесь набор данных, то вы можете увидеть некоторое увеличение памяти.

...