gensim word2vec打印日志丢失

时间:2019-02-26 15:05:39

标签: gensim word2vec

在使用gensim word2vec模型时,如何打印出训练阶段每个时期的损失以日志记录(文件或粗壮)。

我尝试过:

 logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
 logging.root.setLevel(level=logging.INFO)

但是我没看到任何印刷损失。

2 个答案:

答案 0 :(得分:3)

您可以使用方法sum(1 for i in theta if (abs(i)<pi/12) or (abs(i)>pi-pi/12)) 获得word2vec模型的最新训练损失。如果要在每个时期之后打印损失,可以添加一个执行此操作的回调。例如:

get_latest_training_loss()

但是,损失是以累积方式计算的(即,每个时期之后打印的损失是到目前为止所有时期的总损失)。有关更多说明,请参见gojomo's answer here

答案 1 :(得分:0)

这可以打印每个时期的损失。谢谢@Anna Krogager

from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
from gensim.models.callbacks import CallbackAny2Vec

class callback(CallbackAny2Vec):
    '''Callback to print loss after each epoch.'''

    def __init__(self):
        self.epoch = 0
        self.loss_to_be_subed = 0

    def on_epoch_end(self, model):
        loss = model.get_latest_training_loss()
        loss_now = loss - self.loss_to_be_subed
        self.loss_to_be_subed = loss
        print('Loss after epoch {}: {}'.format(self.epoch, loss_now))
        self.epoch += 1

model = Word2Vec(LineSentence('./data/house_list'), size=100, workers=20, \
                    min_count=1, iter=30, window=5, compute_loss=True, callbacks=[callback()])
model.save('./model/v2.model')