首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spaCy NER训练中的训练时代解读

spaCy NER训练中的训练时代解读
EN

Stack Overflow用户
提问于 2021-07-21 14:42:09
回答 3查看 2.4K关注 0票数 3

我当时正在用变压器训练我的NER模型,我不知道为什么在某个时候停止训练,或者为什么会有这么多批次。这就是我的配置文件的样子(相关部分):

代码语言:javascript
复制
[training]
train_corpus = "corpora.train"
dev_corpus = "corpora.dev"
seed = ${system.seed}
gpu_allocator = ${system.gpu_allocator}
dropout = 0.1
accumulate_gradient = 1
patience = 1600
max_epochs = 2
max_steps = 0
eval_frequency = 200
frozen_components = []
before_to_disk = null

[training.batcher]
@batchers = "spacy.batch_by_words.v1"
discard_oversize = false
tolerance = 0.2
get_length = null

[training.batcher.size]
@schedules = "compounding.v1"
start = 100
stop = 1000
compound = 1.001
t = 0.0

[training.optimizer]
@optimizers = "Adam.v1"
beta1 = 0.9
beta2 = 0.999
L2_is_weight_decay = true
L2 = 0.01
grad_clip = 1.0
use_averages = false
eps = 0.00000001
learn_rate = 0.00005

这是训练日志:

代码语言:javascript
复制
============================= Training pipeline =============================
ℹ Pipeline: ['transformer', 'ner']
ℹ Initial learn rate: 5e-05
E    #       LOSS TRANS...  LOSS NER  ENTS_F  ENTS_P  ENTS_R  SCORE 
---  ------  -------------  --------  ------  ------  ------  ------
  0       0         398.75     40.97    2.84    3.36    2.46    0.03
  0     200         906.30   1861.38   94.51   94.00   95.03    0.95
  0     400         230.06   1028.51   98.10   97.32   98.89    0.98
  0     600          90.22   1013.38   98.99   98.40   99.58    0.99
  0     800          80.64   1131.73   99.02   98.25   99.81    0.99
  0    1000          98.50   1260.47   99.50   99.16   99.85    1.00
  0    1200          73.32   1414.91   99.49   99.25   99.73    0.99
  0    1400          84.94   1529.75   99.70   99.56   99.85    1.00
  0    1600          55.61   1697.55   99.75   99.63   99.87    1.00
  0    1800          80.41   1936.64   99.75   99.63   99.87    1.00
  0    2000         115.39   2125.54   99.78   99.69   99.87    1.00
  0    2200          63.06   2395.48   99.80   99.75   99.85    1.00
  0    2400         104.14   2574.36   99.87   99.79   99.96    1.00
  0    2600          86.07   2308.35   99.88   99.79   99.97    1.00
  0    2800          81.05   1853.15   99.90   99.87   99.93    1.00
  0    3000          52.67   1462.61   99.96   99.93   99.99    1.00
  0    3200          57.99   1154.62   99.94   99.91   99.97    1.00
  0    3400         110.74    847.50   99.90   99.85   99.96    1.00
  0    3600          90.49    621.99   99.90   99.91   99.90    1.00
  0    3800          51.03    378.93   99.87   99.78   99.97    1.00
  0    4000          93.40    274.80   99.95   99.93   99.97    1.00
  0    4200         138.98    203.28   99.91   99.87   99.96    1.00
  0    4400         106.16    127.60   99.70   99.75   99.64    1.00
  0    4600          70.28     87.25   99.95   99.94   99.96    1.00
✔ Saved pipeline to output directory
training/model-last

我试着为两个时代(max_epochs=2)训练我的模型,我的列车文件有大约123591个例子,而dev文件有2522个例子。

我的问题是:

  • 因为我的最小批次大小是100,所以我希望我的训练在2400批之前结束,对吗?因为第2400批评估意味着我的最小值为2400*100 = 240000,而且实际上它甚至更多,因为我的批处理大小正在增加。那么,为什么它一直到了# 4600呢?
  • 训练自动结束,但E仍能读到第0世纪。为什么会这样呢?

编辑:为了继续我的第二个要点,我很想知道为什么训练一直持续到4600个批次,因为4600个批次至少意味着4600*100 = 460000个例子,我给出了123591个训练例子,所以我很明显在第一个时代很高,但是E仍然是0。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-07-22 05:02:35

常见问题中有一个条目,但是概括地说:

  • max_steps是最大的迭代。(不是“评估迭代”,而是批处理。)
  • max_epochs是最大的历元数。
  • 如果对patience批次的训练没有改进,它就会停止。这就是阻止你训练的原因。

你的模型似乎已经得到了一个完美的分数,所以我不知道为什么在这种情况下提前停止是一个问题,但这就是正在发生的事情。

票数 4
EN

Stack Overflow用户

发布于 2021-07-21 21:23:43

我认为你的训练正在停止,因为:耐心= 1600,告诉训练停止,如果没有改善在许多批次。

用我的数据集,我必须大大提高“耐心”。否则(类似于您的情况),我甚至没有完成时代0。我只是羡慕你的分数。我很少超过0.9 ..。

max_epochs=2告诉它在两个时期后停止,它不是最小的。

票数 3
EN

Stack Overflow用户

发布于 2022-07-21 14:54:20

历元数0意味着无限。如果>= 0,则训练语料库在内存中加载一次,并在训练循环中进行洗牌。-1指的是流训练语料库,而不是在训练循环中没有洗牌的情况下载入内存。

这是在官方的spacy文档中给出的。https://spacy.io/usage/training

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68471586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档