Как создать обучающий набор данных из огромных двоичных данных, используя TF 2.0? - PullRequest
1 голос
/ 23 октября 2019

У меня есть набор двоичных данных более 15G. Я хочу извлечь данные для обучения модели с использованием TF 2.0. В настоящее время я делаю вот что:

import numpy as np
import tensorflow as tf

data1 = np.fromfile('binary_file1', dtype='uint8')
data2 = np.fromfile('binary_file2', dtype='uint8')
dataset = tf.data.Dataset.from_tensor_slices((data1, data2))
# then do something like batch, shuffle, prefetch, etc.

for sample in dataset:
    pass

, но это поглощает мою память, и я не думаю, что это хороший способ иметь дело с такими большими файлами. Что мне делать, чтобы справиться с этой проблемой?

1 Ответ

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

Вы должны использовать FixedLengthRecordDataset для чтения двоичных файлов. Хотя этот набор данных принимает несколько файлов вместе, он будет извлекать данные только по одному файлу за раз. Поскольку вы хотите, чтобы данные считывались из двух двоичных файлов одновременно, вам придется создать два FixedLengthRecordDataset и затем сжать их.

Еще одна вещь, которую стоит отметить, - вы должны указать параметр record_bytes, который указывает, сколько байтов вы хотите прочитать за одну итерацию. Это должно быть точное кратное общее количество байтов вашего двоичного размера файла.

ds1 = tf.data.FixedLengthRecordDataset('file1.bin', record_bytes=1000)
ds2 = tf.data.FixedLengthRecordDataset('file2.bin', record_bytes=1000)
ds = tf.data.Dataset.zip((ds1, ds2))
ds = ds.batch(32)
...