Я построил конвейер данных.Псевдокод имеет следующий вид:
- набор данных ->
- набор данных = аугмент (набор данных)
- набор данных = набор данных.batch (35) .prefetch (1)
- набор данных = set_from_generator (to_feed_dict (набор данных)) # дорогой операционный
- набор данных = Cache ('/ tmp', набор данных)
- набор данных = набор данных.unbatch ()
- dataset = dataset.shuffle (64) .batch (256) .prefetch (1)
- to_feed_dict (набор данных)
От 1 до 5 действий, необходимых для генерации предварительно обученныхвыходы модели.Я кеширую их, так как они не меняются на протяжении эпох (весы предварительно обученных моделей не обновляются).5–8 действий подготавливают набор данных к обучению.
Необходимо использовать пакеты разных размеров, поскольку входные данные для предварительно подготовленных моделей имеют гораздо большую размерность, чем выходные.
Первая эпоха медленная, поскольку он должен оценить предварительно обученную модель для каждого элемента ввода, чтобы сгенерировать шаблоны и сохранить их на диск.Более поздние эпохи быстрее, , но все еще довольно медленные - я подозреваю, что узким местом является чтение дискового кэша.
Что можно улучшить в этом конвейере данных, чтобы уменьшить проблему?Спасибо!