在使用gensim word2vec模型时,如何打印出训练阶段每个时期的损失以日志记录(文件或粗壮)。
我尝试过:
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
logging.root.setLevel(level=logging.INFO)
但是我没看到任何印刷损失。
答案 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')