损失在迭代中不断增加
Losses keep increasing within iteration
我只是对以下内容有点困惑:
我正在训练一个神经网络并让它打印出损失。我正在对其进行超过 4 次迭代的训练,只是为了尝试一下,并使用批次。我通常将损失函数视为抛物线,其中损失会在再次增加之前减少到最低点。但是随着迭代的进行,我的损失不断增加。
例如,假设每次迭代有 100 个批次。在迭代 0 中,损失从 26.3(批次 0)开始上升到 1500.7(批次 100)。在第 1 次迭代中,它从 2.4e-14 开始,上升到 80.8。
我正在关注来自 spacy (https://spacy.io/usage/examples#training-ner) 的示例。我是否应该比较跨批次的损失(即,如果我从所有批次 0 中获取点,它应该类似于抛物线)?
如果您使用的代码与链接的代码完全相同,则此行为是可以预料的。
for itn in range(n_iter):
random.shuffle(TRAIN_DATA)
losses = {}
# batch up the examples using spaCy's minibatch
batches = minibatch(TRAIN_DATA, size=compounding(4.0, 32.0, 1.001))
for batch in batches:
texts, annotations = zip(*batch)
nlp.update(
texts, # batch of texts
annotations, # batch of annotations
drop=0.5, # dropout - make it harder to memorise data
losses=losses,
)
print("Losses", losses)
一个"iteration"是外循环:for itn in range(n_iter)
。从示例代码中,您还可以推断出 losses
每次迭代都会被重置。 nlp.update
调用实际上会在每次调用中增加适当的损失,即它处理的每个 batch
。
所以是的:对于您处理的每个批次,损失在迭代中增加。要检查您的模型是否真的在学习任何东西,您需要检查迭代之间的损失,类似于原始代码片段中的 print
语句仅在循环批处理后打印,而不是在循环期间打印。
希望对您有所帮助!
我只是对以下内容有点困惑: 我正在训练一个神经网络并让它打印出损失。我正在对其进行超过 4 次迭代的训练,只是为了尝试一下,并使用批次。我通常将损失函数视为抛物线,其中损失会在再次增加之前减少到最低点。但是随着迭代的进行,我的损失不断增加。
例如,假设每次迭代有 100 个批次。在迭代 0 中,损失从 26.3(批次 0)开始上升到 1500.7(批次 100)。在第 1 次迭代中,它从 2.4e-14 开始,上升到 80.8。
我正在关注来自 spacy (https://spacy.io/usage/examples#training-ner) 的示例。我是否应该比较跨批次的损失(即,如果我从所有批次 0 中获取点,它应该类似于抛物线)?
如果您使用的代码与链接的代码完全相同,则此行为是可以预料的。
for itn in range(n_iter):
random.shuffle(TRAIN_DATA)
losses = {}
# batch up the examples using spaCy's minibatch
batches = minibatch(TRAIN_DATA, size=compounding(4.0, 32.0, 1.001))
for batch in batches:
texts, annotations = zip(*batch)
nlp.update(
texts, # batch of texts
annotations, # batch of annotations
drop=0.5, # dropout - make it harder to memorise data
losses=losses,
)
print("Losses", losses)
一个"iteration"是外循环:for itn in range(n_iter)
。从示例代码中,您还可以推断出 losses
每次迭代都会被重置。 nlp.update
调用实际上会在每次调用中增加适当的损失,即它处理的每个 batch
。
所以是的:对于您处理的每个批次,损失在迭代中增加。要检查您的模型是否真的在学习任何东西,您需要检查迭代之间的损失,类似于原始代码片段中的 print
语句仅在循环批处理后打印,而不是在循环期间打印。
希望对您有所帮助!