我当时正在用变压器训练我的NER模型,我不知道为什么在某个时候停止训练,或者为什么会有这么多批次。这就是我的配置文件的样子(相关部分):
[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这是训练日志:
============================= 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个例子。
我的问题是:
编辑:为了继续我的第二个要点,我很想知道为什么训练一直持续到4600个批次,因为4600个批次至少意味着4600*100 = 460000个例子,我给出了123591个训练例子,所以我很明显在第一个时代很高,但是E仍然是0。
发布于 2021-07-22 05:02:35
在常见问题中有一个条目,但是概括地说:
max_steps是最大的迭代。(不是“评估迭代”,而是批处理。)max_epochs是最大的历元数。patience批次的训练没有改进,它就会停止。这就是阻止你训练的原因。你的模型似乎已经得到了一个完美的分数,所以我不知道为什么在这种情况下提前停止是一个问题,但这就是正在发生的事情。
发布于 2021-07-21 21:23:43
我认为你的训练正在停止,因为:耐心= 1600,告诉训练停止,如果没有改善在许多批次。
用我的数据集,我必须大大提高“耐心”。否则(类似于您的情况),我甚至没有完成时代0。我只是羡慕你的分数。我很少超过0.9 ..。
max_epochs=2告诉它在两个时期后停止,它不是最小的。
发布于 2022-07-21 14:54:20
历元数0意味着无限。如果>= 0,则训练语料库在内存中加载一次,并在训练循环中进行洗牌。-1指的是流训练语料库,而不是在训练循环中没有洗牌的情况下载入内存。
这是在官方的spacy文档中给出的。https://spacy.io/usage/training
https://stackoverflow.com/questions/68471586
复制相似问题