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

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

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

目录

  • 一、可视化损失函数好处
  • 二、可视化损失函数代码
    • 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 HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数