使用minibatch进行空间文本分类

时间:2019-01-13 11:20:27

标签: python text-classification spacy mini-batch

我对示例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)

我很痛苦,为什么所有批次的minibatch都会在一次迭代中被消耗,而不是每次主循环迭代都消耗一批次?以下代码应说明我的意思。

        # 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)

谢谢!

您的环境

  • 空间版本: 2.0.12
  • 平台:Windows-10-10.0.14393-SP0
  • Python版本: 3.6.5
  • 型号: de

1 个答案:

答案 0 :(得分:0)

打开issue时,我回答了同样的问题:

  

最好有两个循环,因为对开发的评估   数据每个时间段仅发生一次,而不是每个更新一次-   否则我们会评估得太频繁,而且速度会很慢。

     

我还认为您可能会有一个实现上的怪癖   这样做会更糟。如果您进行*开箱,则必须   消耗生成器并将所有内容加载到内存中。这可以是   比让minibatch生成器流更糟糕,因为   for循环。