Подача больших массивов numpy в оценщики TensorFlow через tf.data.Dataset

В tf.data.Dataset документации TensorFlow по использованию массивов numpy говорится, что для использования массивов numpy в сочетании с API Dataset массивы должны быть достаточно маленькими (всего ‹2 ГБ), чтобы их можно было использовать в качестве тензоров, или их можно вводить в набор данных через заполнители.

Однако если вы используете Dataset в сочетании с оценщиками (где заполнители недоступны), документация не предоставляет решения по работе с большими массивами без заполнителей.

Существуют ли другие варианты передачи значений заполнителей в оценщики, которые можно использовать, или решение заключается в предоставлении данных в формате tfrecord или csv?


person bhnn    schedule 27.02.2019    source источник


Ответы (1)


Вы можете использовать np.split и from_generator перед созданием объекта набора данных.

chunks = list(np.split(array, 1000))

def gen():
    for i in chunks:
        yield i

dataset = tf.data.Dataset.from_generator(gen, tf.float32)
dataset = dataset.shuffle(shuffle_buffer_size)
...

Вы можете контролировать размер набора данных с помощью перемешивания. Он будет загружать только указанное количество за раз.

person Sharky    schedule 27.02.2019
comment
Я использовал from_generator до сих пор. Моя основная проблема заключается в том, что после того, как вы исчерпали итератор набора данных и он повторяется, код генератора вызывается снова. Поскольку данные требуют обширной предварительной обработки, вызов генератора снова и снова по всей модели приводит к значительному замедлению каждые 200-300 шагов. - person bhnn; 27.02.2019