Пространственная классификация текста с использованием мини-пакета

У меня есть вопрос относительно мини-пакетирования, который используется в примере train_textcat.py

Основной цикл обучения выглядит так:

    for i in range(n_iter):
            losses = {}
            # batch up the examples using spaCy's minibatch
            batches = minibatch(train_data, size=compounding(4., 32., 1.001))
            for batch in batches:
                texts, annotations = zip(*batch)
                nlp.update(texts, annotations, sgd=optimizer, drop=0.2,
                           losses=losses)
            with textcat.model.use_params(optimizer.averages):
                # evaluate on the dev data split off in load_data()
                scores = evaluate(nlp.tokenizer, textcat, dev_texts, dev_cats)

Я размышлял, почему все партии мини-пакета потребляются за одно целое, а не по одному пакету за итерацию основного цикла? Следующий код должен объяснить, что я имею в виду.

        # batch up the examples using spaCy's minibatch
        batches = minibatch(train_data, size=compounding(4., 32., 1.001))
        for i, texts, annotations in zip(range(n_iter),*batch):
            losses = {}
            nlp.update(texts, annotations, sgd=optimizer, drop=0.2, losses=losses)
            with textcat.model.use_params(optimizer.averages):
                # evaluate on the dev data split off in load_data()
                scores = evaluate(nlp.tokenizer, textcat, dev_texts, dev_cats)

Заранее спасибо!

Ваше окружение

  • версия spaCy : 2.0.12
  • Платформа: Windows-10-10.0.14393-SP0
  • Версия Python: 3.6.5
  • Модели: де

1 ответ

Ответ на вопрос, который я открыл с тем же вопросом:

Хорошо иметь два цикла, потому что оценка данных разработки должна происходить только один раз за эпоху, а не один раз за обновление - иначе мы будем оценивать слишком часто, и это будет медленным.

Я также думаю, что реализация того, что вы делаете, может быть немного хуже. Если вы распаковываете *, вы должны использовать генератор и загружать все в память. Это может быть хуже, чем пропускать поток генератора мини-пакетов, когда вы входите в цикл for.

Другие вопросы по тегам