深度学习——训练过程实时可视化损失函数走势(附代码)

本文主要是介绍深度学习——训练过程实时可视化损失函数走势(附代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深度学习训练过程实时可视化损失函数可以帮助我们更好地了解模型的训练情况,从而做出更合理的训练决策。

目录

  • 一、可视化损失函数好处
  • 二、可视化损失函数代码
    • 2.1 边训练边可视化
      • 2.1.1 代码
      • 2.1.2 实时可视化效果
    • 2.2 训练完后绘画损失函数
      • 2.2.1 代码
      • 2.2.2 训练完绘制效果
  • 三、总结

一、可视化损失函数好处

帮助我们判断模型是否在正确的方向上训练。如果损失函数一直在下降,说明模型正在逐渐拟合训练数据。如果损失函数一直在上升,说明模型可能存在过拟合或欠拟合的问题。

帮助我们确定训练是否已经收敛。如果损失函数的下降趋势已经平缓,说明模型已经收敛。如果损失函数仍然在下降,说明模型还可以继续训练。

帮助我们调整训练参数。如果损失函数的下降趋势不理想,我们可以调整训练参数,例如学习率、批处理尺寸等,以提高模型的训练效果。

二、可视化损失函数代码

2.1 边训练边可视化

2.1.1 代码

下面给出了一个完整的的训练过程代码,并在中间加了试试可视化代码,学者参考代码架构,在自己代码中将损失函数添加到列表loss_list中,再自定义调整多少个epoch绘画一个损失函数点。具体代码见下:

import torch
import torch.optim as optim  # 导入优化器模块
import matplotlib.pyplot as plt# 定义损失函数
def loss_fn(y_true, y_pred):return torch.mean((y_true - y_pred)**2)# 定义模型
model = torch.nn.Linear(10, 1)# 定义训练数据
x_train = torch.randn(1000, 10)
y_train = torch.randn(1000, 1)# 定义优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)  # 使用 Adam 优化器,学习率为 0.001# 定义损失函数
loss_list = []# 开始训练
for epoch in range(10000):# 前向传播y_pred = model(x_train)# 计算损失loss = loss_fn(y_train, y_pred)loss_list.append(loss.item())# 反向传播loss.backward()# 更新参数optimizer.step()# 展示损失if epoch % 10 == 0:    # 10 个epoch绘画一个损失函数点,可以自定义print(f"epoch {epoch}: loss {loss.item()}")# 更新损失曲线plt.cla()plt.plot(loss_list)plt.xlabel("epoch")plt.ylabel("loss")plt.pause(0.01)# 绘制损失曲线
plt.show()

2.1.2 实时可视化效果

运行上面代码后,会弹出一个窗口,实时绘制损失函数的走势,如下:

在这里插入图片描述

2.2 训练完后绘画损失函数

2.2.1 代码

具体代码见下:

import matplotlib.pyplot as plt
import torch
import torch.optim as optim  # 导入优化器模块# 定义损失函数
def loss_fn(y_true, y_pred):return torch.mean((y_true - y_pred)**2)# 定义模型
model = torch.nn.Linear(10, 1)# 定义训练数据
x_train = torch.randn(1000, 10)
y_train = torch.randn(1000, 1)# 定义优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)  # 使用 Adam 优化器,学习率为 0.001# 定义损失函数
loss_list = []# 开始训练
for epoch in range(10000):# 前向传播y_pred = model(x_train)# 计算损失loss = loss_fn(y_train, y_pred)loss_list.append(loss.item())# 反向传播loss.backward()# 更新参数optimizer.step()# 展示损失if epoch % 10 == 0:print(f"epoch {epoch}: loss {loss.item()}")# 绘制损失曲线
plt.plot(loss_list)
plt.xlabel("epoch")
plt.ylabel("loss")
plt.show()

2.2.2 训练完绘制效果

该模式下,要训练完窗口才会弹出来。

在这里插入图片描述

三、总结

以上就是深度学习训练过程实时可视化损失函数走势的方法,当然还可以通过其它方法实时可视化损失函数走势,比如:

(1)使用图表工具绘制损失函数的曲线。这种方法直观易懂,可以帮助我们快速了解损失函数的变化趋势。

(2)使用日志文件记录损失函数的值。这种方法可以让我们在训练结束后再进行分析,但不如图表工具实时性强。

(3)使用可视化工具直接在训练过程中显示损失函数的值。这种方法最直观,但需要使用特定的工具。

上面方法希望能帮到你,学者灵活使用代码。

总结不易,扫下方二维码关注 视觉研坊,学习更多最新开源资源,多多支持,谢谢!

这篇关于深度学习——训练过程实时可视化损失函数走势(附代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642138

相关文章

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

SpringBoot实现图形验证码的示例代码

《SpringBoot实现图形验证码的示例代码》验证码的实现方式有很多,可以由前端实现,也可以由后端进行实现,也有很多的插件和工具包可以使用,在这里,我们使用Hutool提供的小工具实现,本文介绍Sp... 目录项目创建前端代码实现约定前后端交互接口需求分析接口定义Hutool工具实现服务器端代码引入依赖获

利用Python在万圣节实现比心弹窗告白代码

《利用Python在万圣节实现比心弹窗告白代码》:本文主要介绍关于利用Python在万圣节实现比心弹窗告白代码的相关资料,每个弹窗会显示一条温馨提示,程序通过参数方程绘制爱心形状,并使用多线程技术... 目录前言效果预览要点1. 爱心曲线方程2. 显示温馨弹窗函数(详细拆解)2.1 函数定义和延迟机制2.2

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

SQL 注入攻击(SQL Injection)原理、利用方式与防御策略深度解析

《SQL注入攻击(SQLInjection)原理、利用方式与防御策略深度解析》本文将从SQL注入的基本原理、攻击方式、常见利用手法,到企业级防御方案进行全面讲解,以帮助开发者和安全人员更系统地理解... 目录一、前言二、SQL 注入攻击的基本概念三、SQL 注入常见类型分析1. 基于错误回显的注入(Erro

pandas使用apply函数给表格同时添加多列

《pandas使用apply函数给表格同时添加多列》本文介绍了利用Pandas的apply函数在DataFrame中同时添加多列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、Pandas使用apply函数给表格同时添加多列二、应用示例一、Pandas使用apply函

JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

Springmvc常用的注解代码示例

《Springmvc常用的注解代码示例》本文介绍了SpringMVC中常用的控制器和请求映射注解,包括@Controller、@RequestMapping等,以及请求参数绑定注解,如@Request... 目录一、控制器与请求映射注解二、请求参数绑定注解三、其他常用注解(扩展)四、注解使用注意事项一、控制