添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

通过python画出loss曲线

将训练过程中的running loss保存到文件

for x in range(100):
    with open('loss_records.txt', 'a') as f:
        f.write('%d %.3f\n' % (x, x + 1))
    with open('accurate_records.txt', 'a') as f:
        f.write('%d %.3f\n' % (x, x + 10))

注意:
模式:a
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

1.读取txt文件

现在有两个模型训练结果的records.txt文件

import matplotlib.pyplot as plt
import numpy as np
data1_loss = np.loadtxt("accurate_records.txt")
data2_loss = np.loadtxt("loss_records.txt")

2.取出相应列的数据作为绘图的x和y

数据里第一列是训练步数,第二列的loss

x = data1_loss[:, 0]
y = data1_loss[:, 1]
x1 = data2_loss[:, 0]
y1 = data2_loss[:, 1]

3.先创建一幅图,再在这幅图上添加一个小图

fig = plt.figure(figsize=(7, 5))
ax1 = fig.add_subplot(1, 1, 1)  # ax1是子图的名字

4.画出整体的loss曲线

# "g"代表green,表示画出的曲线是绿色,"-"表示画出的曲线是实线,label表示图例的名称
plt.plot(x, y, 'r-', label=u'Dense_Unet')
plt.plot(x1, y1, 'b-', label=u'RCSCA_Net')
plt.legend()
plt.xlabel(u'iters')
plt.ylabel(u'loss')
plt.title('Compare loss for different models in training.')
plt.show()
                                    使用 python 绘制网络训练过程中的的 loss 曲线以及准确率变化曲线,这里的主要思想就时先把想要的损失值以及准确率值保存下来,保存到 .txt 文件中,待网络训练结束,我们再拿这存储的数据绘制各种曲线。其大致步骤为:数据读取与存储 - > loss曲线绘制 - > 准确率曲线绘制我们首先要得到训练时的数据,以损失值为例,网络每迭代一次都会产生相应的 loss,那么我们就把每一次的损失值都存储下来,存储到列表,保存到 .txt 文件中。保存的文件如下图所示:
上图为部分损失值,根据迭代次数而异,要是迭
                                    train.py完成了语义分割模型的训练过程,支持分布式训练、混合精度训练、多卡同步BN等功能,可以根据需要灵活配置网络结构和训练参数。在训练过程中,会根据指定的训练阶段对模型的参数进行冻结和解冻,从而满足机器性能不足的情况下,逐步训练更复杂的模型。
##显示中文
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = 'SimSun,Times New Roman'
##读取log文件
logFile = r'...\log-20210818-090024.log' 
text = ''
                                    使用 python的plot 绘制网络训练过程中的的 loss 曲线以及准确率变化曲线,这里的主要思想就时先把想要的损失值以及准确率值保存下来,保存到 .txt 文件中,待网络训练结束,我们再拿这存储的数据绘制各种曲线。
                                    在卷积神经网络中,有时候为了更直观的看出损失函数(Loss Function)的变化,需要用曲线的形式来展现。如何在一张图中将train和test的Loss变化全部显示出来?
def plot_acc_loss(loss, acc):
    host = host_subplot(111)  # row=1 col=1 first pic
    plt.subpl...
文件读取的形式可以参考上一篇文章,主体不变,主要部分还是在字符串分割上。
def getLossAcc(logFile):
    f = open(logFile, "r", encoding='utf-8')
    line = f.readline()  # 以行的形式进行读