如何用Python绘制Skip-gram模型训练的Loss变化曲线?
绘制Skip-Gram训练Loss曲线的方案
没问题,这事儿不难,咱们只需要两步:先收集每个epoch的Loss数据,再用matplotlib把它画出来就行。我帮你修改训练代码,再加上绘图的部分,直接就能用:
第一步:修改训练代码,收集Loss历史数据
你只需要在训练循环前初始化一个列表来存储每个epoch的Loss,然后每个epoch结束后把loss值加进去就行:
# 先导入需要的库(如果还没导的话) import numpy as np from matplotlib import pyplot as plt # 初始化一个列表来保存每个epoch的Loss loss_history = [] # Train model for epoch in range(1, 151): loss = 0 for i, elem in enumerate(skip_grams): pair_first_elem = np.array(list(zip(*elem[0]))[0], dtype='int32') pair_second_elem = np.array(list(zip(*elem[0]))[1], dtype='int32') labels = np.array(elem[1], dtype='int32') test.X = [pair_first_elem, pair_second_elem] test.Y = labels #if i % 10000 == 0: #print('Processed {} (skip_first, skip_second, relevance) pairs'.format(i)) loss += model1.train_on_batch(test.X,test.Y) print('Epoch:', epoch, 'Loss:', loss) # 把当前epoch的Loss加入历史列表 loss_history.append(loss)
第二步:绘制Loss变化曲线
训练完成后,用matplotlib绘制曲线,还可以加上标题、坐标轴标签,让图更清晰:
# 创建绘图对象,设置画布大小 plt.figure(figsize=(10, 6)) # 绘制Loss曲线,加上标记点更直观 plt.plot(range(1, 151), loss_history, marker='o', linestyle='-', color='b') # 设置图的标题和坐标轴标签 plt.title('Skip-Gram Training Loss Over Epochs', fontsize=14) plt.xlabel('Epoch', fontsize=12) plt.ylabel('Total Loss', fontsize=12) # 显示网格线,方便读取数值 plt.grid(True) # 显示图像(或者用plt.savefig('loss_curve.png')保存到本地) plt.show()
一些小提示
- 如果你的Loss值波动很大,可以考虑对Loss做平滑处理(比如计算滑动平均),曲线会更易读。
- 如果你想保存图片,把
plt.show()换成plt.savefig('skip_gram_loss_curve.png', dpi=300)就能得到高清的PNG图。 - 确保你已经安装了matplotlib,如果没装的话,运行
pip install matplotlib就能完成安装。
内容的提问来源于stack exchange,提问作者Amanda Tennakoon
相关产品推荐
相关产品推荐

