Как работать с большим CSV-файлом при обучении модели глубокого обучения? - PullRequest
3 голосов
/ 25 января 2020

У меня есть огромный набор данных для обучения модели глубокого обучения. Это в формате .csv. Это около 2 ГБ, и сейчас я просто загружаю все данные в память с помощью pandas.

df = pd.read_csv('test.csv')

, затем добавляю все в модель keras и затем обучаю модель, как показано ниже,

model.fit(df, targets)

Я хочу знать, какие еще варианты у меня есть, когда дело касается даже больших наборов данных. Как около 10 ГБ (или) что-то. У меня нет оперативной памяти, чтобы загрузить все в память и передать ее модели.

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

Как обучить модель, не загружая все в память? Это нормально, если у вас есть какие-либо решения, и он использует немного памяти. Просто дай мне знать.

1 Ответ

0 голосов
/ 25 января 2020

Я не использовал эту функцию раньше, но может быть что-то вроде:

class CsvSequence(Sequence):
    def __init__(self, batchnames):
       self.batchnames = batchnames

    def __len__(self):
       return len(self.batchnames)

    def __getitem__(self, i):
       name = self.batchnames[i]
       X = pd.read_csv(name + '-X.csv')
       Y = pd.read_csv(name + '-Y.csv')
       return X, Y

будет работать. вам нужно предварительно обработать данные, разбив файл размером 10 ГБ, например, на 10 файлов меньшего размера. утилита Unix split может быть достаточной, если ваши CSV-файлы содержат одну запись на строку (большинство делают)

в качестве неполного примера использования этого:

seq = CsvSequence([
  'data-1', 'data-2', 'data-3'])

model.fit_generator(seq)

но обратите внимание, что вы быстро захотите сделать что-то более эффективное, приведенное выше может привести к тому, что ваши CSV-файлы будут прочитаны много раз. меня не удивит, если эта загрузка займет больше времени, чем все остальное, вместе взятые

. Одним из предложений будет предварительная обработка файлов перед тренировкой, сохранение их в numpy двоичных файлах . затем двоичные файлы могут mmap редактироваться, тогда как load ing , что намного эффективнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...