在SpaCy的Optimizer中更改默认学习率

时间:2019-06-28 10:09:21

标签: python spacy

如果我想更改优化器的learn_rate,正确的方法是什么?

根据begin_trainingdefault optimizer的定义,我想我必须像这样提供component_cfg param

optimizer = nlp.begin_training(component_cfg={'learn_rate': 0.01})?

但是我不知道它是否正确,因为如果我这样叫begin_training

optimizer = nlp.begin_training(component_cfg={'dummy_param': 0.01})?

没有警告或错误。

3 个答案:

答案 0 :(得分:2)

要更改spaCy的默认设置,您需要覆盖默认参数值。

要更改学习率,您可以执行以下操作:

optimizer.learn_rate = 0.01

答案 1 :(得分:1)

我怀疑这是“正确”的答案,但这对我有用(因此更像是对自己的注释:p):

  • 我没有使用begin_training()返回优化器,因为它 只会创建一个默认值。我认为,你可能会骗人 有环境变量,但我没有尝试过
  • 相反,我最终生成了自己的优化器。所以我的代码看起来像这样:
from thinc.neural.optimizers import Adam
from thinc.neural import Model

# .... other bits of code :)

nlp.begin_training()

# optimizer options. Defaults are changed where commented
ops = Model.ops
learn_rate = 0.001
beta1 = 0.9
beta2 = 0.999
eps = 1e-8
L2 = 1e-6
max_grad_norm = 1.0
optimizer = Adam(ops, learn_rate, L2=L2, beta1=beta1, beta2=beta2, eps=eps)
optimizer.max_grad_norm = max_grad_norm
optimizer.device = ops.device

您可能已经猜到了,以上大部分内容都是从代码复制粘贴而成的,该代码首先生成了默认优化器:https://github.com/explosion/spaCy/blob/69e70ffae16700e990d60640f27eb7f980c0ba50/spacy/_ml.py#L49

似乎是从这里的begin_training()方法中调用的:https://github.com/explosion/spaCy/blob/4d4b3b0783bdca38493e27dee2939b3ded735c4e/spacy/language.py#L597是我想到ops应该为thinc.neural.Model.ops

的地方

答案 2 :(得分:0)

基于https://github.com/explosion/spaCy/blob/69e70ffae16700e990d60640f27eb7f980c0ba50/spacy/_ml.py#L49处的优化程序创建,spacy从环境变量中为learning_rate,beta1,beta2等获取值。您始终可以使用

来启动脚本
learn_rate=0.005 python script.py

为了灵活使用学习率0.005,以此类推。

参考:https://spacy.io/api/cli#train-hyperparams