neural-network - 使用 spacy 训练自定义 ner 模型时,“drop”和“sgd”是什么意思?
问题描述
我正在训练一个自定义 ner 模型来识别地址中的组织名称。我的训练循环如下所示:-
for itn in range(100):
random.shuffle(TRAIN_DATA)
losses = {}
batches = minibatch(TRAIN_DATA, size=compounding(15., 32., 1.001))
for batch in batches
texts, annotations = zip(*batch)
nlp.update(texts, annotations, sgd=optimizer,
drop=0.25, losses=losses)
print('Losses', losses)
有人可以解释参数“drop”、“sgd”、“size”,并就我应该如何更改这些值给出一些想法,以便我的模型表现更好。
解决方案
您可以在 spaCy 文档中找到详细信息和提示:
https://spacy.io/usage/training#tips-batch-size:
增加批量大小的技巧开始变得非常流行......在训练各种 spaCy 模型时,我们没有发现降低学习率有多大优势——但从小批量开始肯定会有所帮助
batch_size = compounding(1, max_batch_size, 1.001)
这会将批次大小设置为从 1 开始,并增加每个批次,直到达到最大大小。
https://spacy.io/usage/training#tips-dropout:
对于小型数据集,首先设置一个较高的 dropout 率是很有用的,然后将其衰减到一个更合理的值。这有助于避免网络立即过度拟合,同时仍然鼓励它学习数据中一些更有趣的东西。spaCy 带有一个衰减的效用函数来促进这一点。您可以尝试设置:
dropout = decaying(0.6, 0.2, 1e-4)
https://spacy.io/usage/training#annotations:
sgd
:优化器,即更新模型权重的可调用程序。如果未设置,spaCy 将创建一个新的并保存以供进一步使用。
推荐阅读
- python - pybind11 如何为简单的示例类使用自定义类型转换
- swift - iOS:如何在 Swift 中从 CGImage 获取像素数据数组
- r - 如何在ggplot2中标记饼图?
- hibernate - 如何从联接查询中获取计数 - 条件生成器
- swift - 如何使用 SwiftUI 获取鼠标位置?
- javascript - 循环连接内容文件
- c++ - 声明和定义类静态成员变量不会导致多次声明,这是为什么呢?
- jenkins - 当我单击 Jenkins 中的“立即构建”链接时,我只希望它构建一次,但它构建了两次
- amazon-web-services - AWS - 通过 Cloudformation 创建的 SSH 到 EC2
- amazon-cloudformation - AWS CloudFormation:使用 {{resolve}} 的具有动态引用的嵌套子会导致错误并且不执行解析以从 Parameter Store 获取值