使用小批量的空间文本分类



我对示例中使用的小批量有一个问题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
  • 平台: 视窗-10-10.0.14393-SP0
  • 蟒蛇版本:3.6.5
  • 型号:

我以同样的问题打开的问题:

有两个循环很好,因为对开发的评估 每个纪元只能发生一次数据,而不是每个更新---一次 否则我们会过于频繁地评估,而且会很慢。

我也认为你可能有一个实现怪癖,你是什么 这样做有点糟糕。如果你做*拆包,你必须 使用生成器并将所有内容加载到内存中。这可以是 比让小批量生成器流式传输更糟糕,因为您进入 对于循环。

相关内容

  • 没有找到相关文章

最新更新