Doc2Vec模型训练时tqdm进度条跑完后程序仍长时间运行问题
问题根因
- 你代码里的
tqdm仅包裹了train_tagged.values的遍历转换过程,统计的是把所有样本加载生成列表的进度,这步本身IO和计算量都很小,几分钟跑完符合预期。 - 真正耗时的40轮Doc2Vec训练逻辑是在
model_dbow.train()方法内部执行的,这部分没有接入tqdm的进度统计,所以才会出现进度条走完后程序仍长时间运行的情况,和tqdm本身的功能无关。
修复方案
你可以调整写法把进度统计接入到实际训练阶段,两种常用实现方式如下:
- 开启gensim内置训练日志,直接查看每轮训练进度
import logging logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) # 训练阶段去掉列表生成步骤多余的tqdm即可 model_dbow.train(utils.shuffle(list(train_tagged.values)), total_examples=len(train_tagged.values), epochs=40)
- 手动逐轮训练,给训练周期套tqdm进度条
from tqdm import tqdm for epoch in tqdm(range(40)): model_dbow.train(utils.shuffle(list(train_tagged.values)), total_examples=len(train_tagged.values), epochs=1) # 手动衰减学习率,和原生train多轮训练逻辑保持一致 model_dbow.alpha -= 0.0002 model_dbow.min_alpha = model_dbow.alpha
内容的提问来源于stack exchange,提问作者user16796049
相关产品推荐
相关产品推荐

