Доброе утро, я использую keras для обучения сиамской сети с потерей триплетов и майнингом триплетов в Интернете.
У меня есть несбалансированный набор данных, состоящий из 16 классов, чтобы добывать лучшие триплеты, мне нужно получить пакет сэмплов с одинаковым количеством классов в пакете.
Поскольку мой набор данных большой, я не могу полностью загрузить в память и использовать существующую модификацию BalancedGenerator, мне нужно загружать из файлов с помощью flow_from_directory.
Моя первоначальная идея состояла в том, чтобы изменить keras ImageDataGenerator таким образом, чтобы, задав большой размер batch_size (например, 1024), для каждой итерации я мог выбрать сбалансированное подмножество 1024 index_array и обучить сеть.
Мой код работает, но есть большая проблема, on_batch_end вызывается слишком часто, это приводит к неправильному поведению оптимизатора Adam и, очевидно, сильно замедляет обучение.
Я могу решить эту проблему, установив правильный количество итераций за эпоху, но, на мой взгляд, я теряю слишком много изображений даже если я обучаю сеть для большого количества эпох.
Есть ли способ достичь чего-то подобного, сохранив при этом преимущества keras ImageDataGenerator?