Python读取log文件绘制Loss曲线

训练model时将新鲜保存至log:

在这里插入图片描述

log文件存放数据格式如下:

INFO 2022-04-12 13:25:54 train.py: 148] xxxxxxx| 2022-04-12 13:25:54.727680 | step:1/1/100 | lr=0.000001 | loss=4.375328 | loss2=1.777036 | loss3=1.451537 | loss4=1.436890 | loss5=1.437320
INFO 2022-04-12 13:26:02 train.py: 148] xxxxxxx| 2022-04-12 13:26:02.675321 | step:11/1/100 | lr=0.000001 | loss=4.338048 | loss2=1.799401 | loss3=1.400347 | loss4=1.404003 | loss5=1.439920
INFO 2022-04-12 13:26:10 train.py: 148] xxxxxxx| 2022-04-12 13:26:10.768723 | step:21/1/100 | lr=0.000001 | loss=4.435394 | loss2=1.917998 | loss3=1.403522 | loss4=1.399962 | loss5=1.386502
INFO 2022-04-12 13:26:18 train.py: 148] xxxxxxx| 2022-04-12 13:26:18.856023 | step:31/1/100 | lr=0.000002 | loss=4.242309 | loss2=1.729486 | loss3=1.394903 | loss4=1.383412 | loss5=1.417133
。。。。。。

完整程序如下:

import matplotlib.pyplot as plot
def getLoss(logFile):
    f = open(logFile, "r", encoding='utf-8')
    line = f.readline()  # 以行的形式进行读取文件
    lossArr = []
    loss2Arr = []
    loss3Arr = []
    loss4Arr = []
    loss5Arr = []
    while line:
        if 'loss=' in line:
            lossArr.append(float(line[-77:-68]))
            loss2Arr.append(float(line[-60:-51]))
            loss3Arr.append(float(line[-43:-34]))
            loss4Arr.append(float(line[-26:-17]))
            loss5Arr.append(float(line[-9:]))
        line = f.readline()
    f.close()
    return lossArr, loss2Arr, loss3Arr, loss4Arr, loss5Arr
def drawLine(arr, xName, yName, title, graduate):
    # 横坐标 采用列表表达式
    x = [x+1 for x in range(len(arr))]
    # 纵坐标
    y = arr
    # 生成折线图:函数polt
    plot.plot(x, y)
    # 设置横坐标说明
    plot.xlabel(xName)
    # 设置纵坐标说明
    plot.ylabel(yName)
    # 添加标题
    plot.title(title)
    # 设置纵坐标刻度
    plot.yticks(graduate)
    # 显示网格
    plot.grid(True)
    # 显示图表
    plot.show()
if __name__ == '__main__':
    loss, loss2, loss3, loss4, loss5 = getLoss(r"train_scwssod.log")
    print(loss)
    print(loss2)
    print(loss3)
    print(loss4)
    print(loss5)
    graduate = []
    deGraduate = 5
    # 计算y的刻度值
    for i in range(len(loss)):
        if i * deGraduate < max(loss) + deGraduate:
            graduate.append(i * deGraduate)
    print(graduate)
    drawLine(loss, "Iterated", "Loss", "Loss function curve", graduate)
    drawLine(loss2, "Iterated", "Loss", "Loss function curve", graduate)
    drawLine(loss3, "Iterated", "Loss", "Loss function curve", graduate)
    drawLine(loss4, "Iterated", "Loss", "Loss function curve", graduate)
    drawLine(loss5, "Iterated", "Loss", "Loss function curve", graduate)

本文希望对大家有帮助,当然上文若有不妥之处,欢迎指正。

分享决定高度,学习拉开差距

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
log-log曲线拟合是一种数学数据拟合方法,适用于处理具有广泛动态范围的数据。在java中,我们可以使用不同的库和算法来实现log-log曲线拟合。 一种常见的方法是使用Apache Commons Math库。该库提供了丰富的数学函数和算法,其中包括曲线拟合功能。通过引入此库,我们可以使用最小二乘法进行log-log曲线拟合。 首先,我们需要将原始数据转换为对数形式。然后,我们可以使用LeastSquareCurveFitter类来执行拟合操作。该类接受一个拟合函数和初始参数值作为输入,并返回最优拟合参数。 以下是一个简单的示例代码,用于演示如何在java中进行log-log曲线拟合: ```java import org.apache.commons.math3.fitting.*; public class LogLogCurveFitting { public static void main(String[] args) { // 转换原始数据为对数形式 double[] xData = {1, 2, 3, 4, 5}; double[] yData = {1, 4, 9, 16, 25}; double[] logXData = new double[xData.length]; double[] logYData = new double[yData.length]; for (int i = 0; i < xData.length; i++) { logXData[i] = Math.log(xData[i]); logYData[i] = Math.log(yData[i]); } // 执行拟合操作 WeightedObservedPoints obs = new WeightedObservedPoints(); for (int i = 0; i < logXData.length; i++) { obs.add(logXData[i], logYData[i]); } PolynomialCurveFitter fitter = PolynomialCurveFitter.create(1); double[] fittedParams = fitter.fit(obs.toList()); // 输出最优拟合参数 System.out.println("Intercept: " + fittedParams[0]); System.out.println("Slope: " + fittedParams[1]); } } ``` 在上述示例中,我们使用了二次曲线拟合函数(即多项式拟合函数),通过PolynomialCurveFitter.create(1)方法创建一个拟合器。然后,我们添加经过对数转换的数据点,最后得到最优的拟合参数。 需要注意的是,log-log曲线拟合结果中的斜率通常表示原始数据中的幂律关系。因此,如果拟合结果中斜率非零,则说明数据存在幂律关系。 这只是一个简单的示例,实际使用中,可能需要根据具体的数据和需求选择合适的拟合函数,以及进行参数调整和性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁棒最小二乘支持向量机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值