Действительно параллельный генератор данных в Керасе - PullRequest
0 голосов
/ 11 января 2019

Я замечал, что подача данных является узким местом при обучении моих моделей глубокого обучения. Я видел несколько результатов Google для параллельного генератора, но единственные ответы, которые я нашел, включают следующий фрагмент кода.

class threadsafe_iterator:
    def __init__(self, iterator):
        self.iterator = iterator
        self.lock = threading.Lock()

    def __iter__(self):
        return self

    def __next__(self):
        with self.lock: # <-- the lock is here
            return next(self.iterator)

def threadsafe_generator(func):
    """Decorator"""
    def gen(*a, **kw):
        return threadsafe_iterator(func(*a, **kw))
    return gen

Проблема заключается в том, что threadsafe_iterator использует блокировку, чтобы обеспечить выполнение только одного экземпляра функции в любой момент времени. Я думаю о создании чего-то еще, такого как схема «производитель-потребитель», но сначала я хотел бы получить отзывы сообщества, или, возможно, уже есть работающее решение.

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