Пространственная классификация текста с использованием мини-пакета - PullRequest
0 голосов
/ 13 января 2019

У меня есть вопрос относительно мини-пакетирования, который используется в примере 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
  • Модели: de

1 Ответ

0 голосов
/ 14 января 2019

Ответ от вопроса Я открыл с тем же вопросом:

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

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

...