如果我想更改优化器的learn_rate
,正确的方法是什么?
根据begin_training和default 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})?
没有警告或错误。
答案 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,以此类推。