【问题标题】:Why does my training function throw up the Name error "name decaying is not defined"?为什么我的训练函数会抛出名称错误“名称衰减未定义”?
【发布时间】:2020-03-25 03:12:15
【问题描述】:

所以,我是 NLP 的新手,我正在尝试使用 spacy_transformers 训练一个文本分类器。此代码已显示可以运行,但它会在我的计算机上引发错误。作为旁注,这可能是由我在 CPU 上运行它的脂肪引起的吗?

def train_classifier(n_epoch:int=5, 
                     train_data:list=None, 
                     val_text:tuple=None, 
                     val_label:list=None, 
                     batch_size:int=32, 
                     lr:float=1e-3):
    train_stats = []
    dropout = decaying(0.2, 0.1, 0.3) # Gradually decrease dropout rate from 0.2 to 0.1
    # Cyclic triangular rate (https://arxiv.org/abs/1506.01186)
    learn_rates = cyclic_triangular_rate(
        lr / 3, lr * 3, 2 * len(train_data) // batch_size
    )

    for epoch in range(n_epoch):
        random.shuffle(train_data)
        batches = minibatch(train_data, size=batch_size)
        losses = {}

        for batch in batches:
            optimizer.trf_lr = next(learn_rates)
            texts, cats = zip(*batch)
            nlp.update(
                texts, 
                cats, 
                drop = next(dropout),
                sgd = optimizer,
                losses=losses)




然后当我通过函数时


train_classifier(n_epoch=10, train_data=train_data, val_text=val_text, val_label=val_label, batch_size=32, lr=2e-6)

我收到以下错误

<ipython-input-55-5bb071ef310c> in train_classifier(n_epoch, train_data, val_text, val_label, batch_size, lr)
      6                      lr:float=1e-3):
      7     train_stats = []
----> 8     dropout = decaying(0.2, 0.1, 0.3) # Gradually decrease dropout rate from 0.2 to 0.1
      9     # Cyclic triangular rate (https://arxiv.org/abs/1506.01186)
     10     learn_rates = cyclic_triangular_rate(

NameError: name 'decaying' is not defined

【问题讨论】:

  • 你从哪里得到这个代码? decaying(0.2, 0.1, 0.3) 似乎是对一个函数的调用,需要在外部范围内定义该函数才能运行。
  • 这个问题已经解决了。我未能导入此“从 spacy.util 导入衰减、小批量、复合”。它现在正在运行

标签: python nlp spacy-transformers


【解决方案1】:

我对 spacy 一点也不熟悉,但是经过几次 google 搜索后,看起来这个函数可能依赖于 spacy 的 util.decaying 函数。如果没有将衰减函数加载到内存中,这个train_classifier 函数将抛出一个NameErrordecaying函数的代码如下,可以在here找到。

def decaying(start, stop, decay):
    """Yield an infinite series of linearly decaying values."""

    curr = float(start)
    while True:
        yield max(curr, stop)
        curr -= decay

【讨论】:

    猜你喜欢
    • 2020-01-05
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多