DL4J/ND4J: Можно ли повторно использовать экземпляр INDArray?

У меня есть модель для обучения на большом наборе данных, который не помещается в ОЗУ. Итак, в основном мой план состоит в том, чтобы разрезать набор данных, создавая экземпляр DataSet с входными векторами и соответствующими метками для каждого фрагмента. Например. если бы у меня было 1 млн входных векторов/меток, я бы разделил их на 10 частей по 100 000 записей в каждой.
Затем я бы поместил часть в 2 объекта INDArray (для входных данных и меток), создал бы DataSet и вызвал model.fit() с этим набор данных, повторяя эту процедуру для каждого фрагмента и повторяя весь процесс, пока, скажем, оценка модели не достигнет некоторого значения. Мои вопросы:
1. Правильно ли я понимаю процесс?
2. Можно ли повторно использовать INDArray экземпляров? Было бы правильно выделить их один раз, а затем снова и снова заполнять фрагментами набора данных?


person faraway    schedule 11.07.2018    source источник


Ответы (1)


Вам не нужно ничего этого делать. Workspaces уже решает вашу проблему распределения: http://deeplearning4j.org/workspaces

Просто используйте стандартный шаблон datavec -> recordreaderdatasetiterator -> набор данных. Это уже обрабатывает мини-пакеты для вас.

person Adam Gibson    schedule 11.07.2018
comment
Нужно ли явно использовать рабочие области или есть рабочая область по умолчанию? Есть ли пример шаблона, о котором вы говорите? В основном я видел код для обучения на изображениях или предопределенных наборах данных, таких как MNIST. У меня есть собственный файл с 27 миллионами входных векторов и меток, на которых я хотел бы обучить сеть, и каждый вектор требует некоторой предварительной обработки, чтобы поместить его в INDArray... - person faraway; 11.07.2018
comment
Да, вы используете его как часть обучения. Ни одно из ваших дальнейших замечаний здесь не уместно. Мы уже делаем все выделение памяти за вас. Посмотрите документацию по рабочим областям для вашего конкретного случая использования. - person Adam Gibson; 11.07.2018
comment
Есть примеры? Я нашел учебник DataVec по преобразованию одного CSV в другой с помощью Spark. - person faraway; 11.07.2018
comment
Которого? Все, что имеет средство чтения записей, будет работать: github.com/deeplearning4j/dl4j- examples/ это основное хранилище примеров. Все здесь. - person Adam Gibson; 12.07.2018
comment
Извините, что беспокою вас, для вас это может показаться очень очевидным, но почему-то для меня это не так. Все примеры из вашей ссылки используют либо CSVRecordReader, либо ImageRecordReader из коробки. Проблема в том, что мои входные векторы и желаемые выходные данные находятся в одном двоичном файле в виде записей фиксированного размера. Файл не является ни CSV, ни изображением. Думаю, мне нужно реализовать собственный RecordReader, и я искал пример этого. Попробую прочитать реализацию ImageRecordReader. - person faraway; 12.07.2018
comment
Тогда вы бы написали свой собственный считыватель записей. Итератор будет обрабатывать пакетную обработку и все остальное за вас. Если вам нужна помощь в реализации пользовательского средства чтения записей, вы можете посмотреть существующие, или мы будем более чем рады помочь вам в Gitter здесь: gitter.im/deeplearning4j/deeplearning4j - person Adam Gibson; 12.07.2018