问题描述
每个时期增加model.get_latest_training_loss()
会导致什么损失?
What can cause loss from model.get_latest_training_loss()
increase on each epoch?
用于培训的代码:
class EpochSaver(CallbackAny2Vec):
'''Callback to save model after each epoch and show training parameters '''
def __init__(self, savedir):
self.savedir = savedir
self.epoch = 0
os.makedirs(self.savedir, exist_ok=True)
def on_epoch_end(self, model):
savepath = os.path.join(self.savedir, "model_neg{}_epoch.gz".format(self.epoch))
model.save(savepath)
print(
"Epoch saved: {}".format(self.epoch + 1),
"Start next epoch ... ", sep="\n"
)
if os.path.isfile(os.path.join(self.savedir, "model_neg{}_epoch.gz".format(self.epoch - 1))):
print("Previous model deleted ")
os.remove(os.path.join(self.savedir, "model_neg{}_epoch.gz".format(self.epoch - 1)))
self.epoch += 1
print("Model loss:", model.get_latest_training_loss())
def train():
### Initialize model ###
print("Start training Word2Vec model")
workers = multiprocessing.cpu_count()/2
model = Word2Vec(
DocIter(),
size=300, alpha=0.03, min_alpha=0.00025, iter=20,
min_count=10, hs=0, negative=10, workers=workers,
window=10, callbacks=[EpochSaver("./checkpoints")],
compute_loss=True
)
输出:
从时期(1到20)丢失:
Losses from epochs (1 to 20):
Model loss: 745896.8125
Model loss: 1403872.0
Model loss: 2022238.875
Model loss: 2552509.0
Model loss: 3065454.0
Model loss: 3549122.0
Model loss: 4096209.75
Model loss: 4615430.0
Model loss: 5103492.5
Model loss: 5570137.5
Model loss: 5955891.0
Model loss: 6395258.0
Model loss: 6845765.0
Model loss: 7260698.5
Model loss: 7712688.0
Model loss: 8144109.5
Model loss: 8542560.0
Model loss: 8903244.0
Model loss: 9280568.0
Model loss: 9676936.0
我在做什么错了?
语言阿拉伯语.作为DocIter的输入-带有令牌的列表.
Language arabian.As input from DocIter - list with tokens.
推荐答案
在gensim 3.6.0之前,报告的损失值可能不是很明智,仅将每次调用的计数重置为train()
,而不是将每个内部纪元重置.此问题中有一些修复程序:
Up through gensim 3.6.0, the loss value reported may not be very sensible, only resetting the tally each call to train()
, rather than each internal epoch. There are some fixes forthcoming in this issue:
https://github.com/RaRe-Technologies/gensim/pull/2135
与此同时,先前值和最新值之间的差异可能更有意义.在这种情况下,您的数据表明,第一个时期总计亏损745896,而最后一个时期(9676936-9280568 =)396,368 –这可能表示希望取得的进展.
In the meantime, the difference between the previous value, and the latest, may be more meaningful. In that case, your data suggest the 1st epoch had a total loss of 745896, while the last had (9676936-9280568=) 396,368 – which may indicate the kind of progress hoped-for.
这篇关于培训期间的损失不会减少(Word2Vec,Gensim)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!