Gensim Word2vec Print Log Loss
how to print to log (file or stout) the loss of each epoch in the training phase, when using gensim word2vec model. I tried : logging.basicConfig(format='%(asctime)s: %(levelname
Solution 1:
You can get the latest training loss of a word2vec model with the method get_latest_training_loss()
. If you want to print the loss after every epoch you can add a callback that does this. For example:
from gensim.test.utils import common_texts, get_tmpfile
from gensim.models import Word2Vec
from gensim.models.callbacks import CallbackAny2Vec
classcallback(CallbackAny2Vec):
'''Callback to print loss after each epoch.'''def__init__(self):
self.epoch = 0defon_epoch_end(self, model):
loss = model.get_latest_training_loss()
print('Loss after epoch {}: {}'.format(self.epoch, loss))
self.epoch += 1
model = Word2Vec(common_texts, size=100, window=5, min_count=1,
compute_loss=True, callbacks=[callback()])
However, the loss is computed in a cumulative way (i.e. the loss that gets printed after each epoch is the total loss of all epochs so far). See gojomo's answer here for more explanation.
Solution 2:
This can print loss for each epoch. Thanks @Anna Krogager
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
from gensim.models.callbacks import CallbackAny2Vec
classcallback(CallbackAny2Vec):
'''Callback to print loss after each epoch.'''def__init__(self):
self.epoch = 0
self.loss_to_be_subed = 0defon_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')
Post a Comment for "Gensim Word2vec Print Log Loss"