Pytorch从入门到放弃(7)——可视化模型训练过程中的loss变化

本文介绍了如何使用Tensorboard在Pytorch中可视化深度学习模型的训练过程,包括loss和accuracy的变化,以帮助选择最佳模型权重。通过安装低版本的Tensorflow和相关代码,记录训练与验证阶段的关键指标,并使用tensorboard进行可视化分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深度学习就像炼丹,一次模型的训练需要很长时间,任何人都无法做到一直盯着模型的训练。通常都是开启模型训练之后,只要不报错并且随着迭代次数的增加模型的loss在下降,这时我都会去干别的了让它跑去吧,第二天再来看我的丹炼的怎么样。这时怎么在一堆仙丹(经过一天的训练会保存许多模型的权重,每迭代多少个batch或每个epoch保存一次权重)中找到最好的那一个。如果盲目的取最后几次保存的,容易取到过拟合的模型;相反如果随机在前中期取一个,则容易取到欠拟合的模型。因此,我们需要可以直观的看到模型训练过程中(训练阶段、验证阶段)loss值与accuracy值的变化曲线,选取一个在训练阶段与验证阶段均达到收敛的权重。

通过查找资料,发现可以借助tensorflow的tensorboard工具实现训练过程的可视化。由于是Caffe起家后来转用Pytorch,期间也学过一段时间的Tensorflow,由于不是一个好的TFBOY对TF的一些函数也不是太清楚,有幸在github上找到一位大神封装好的代码(https://github.com/yunjey/pytorch-tutorial/tree/master/tutorials/04-utils/tensorboard),所以我就无耻的拿了过来。

首先需要再已有Pytorch环境的基础上安装tensorflow,安一个cpu版本的tensorflow即可,因为只需要tensorflow带的tensorboard工具箱。(强烈建议安装低版本的tensorflow,在实验中我电脑安装的就是1.4版本的即可满足我可视化的需求,pip install tensorflow==1.4.0)。

1、项目代码组织结构

2、logger.py

大佬封装的工具可以实现,loss、accuracy、weight、grad、image在训练过程中变化记录,个人认为loss与accuracy是模型训练时比较关注的主要指标。

# Code referenced from https://gist.github.com/gyglim/1f8dfb1b5c82627ae3efcfbbadb9f514
import tensorflow as tf
import numpy as np
import scipy.misc 
try:
    from StringIO import StringIO  # Python 2.7
except ImportError:
    from io import BytesIO         # Python 3.x


class Logger(object):
    
    def __init__(self, log_dir):
        """Create a summary writer logging to log_dir."""
        self.writer = tf.summary.FileWriter(log_dir)

    def scalar_summary(self, tag, value, step):
        """Log a scalar variable."""
        summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value)])
        self.writer.add_summary(summary, step)

    def image_summary(self, tag, images, step):
        """Log a list of images."""

        img_summaries = []
        for i, img in enumerate(images):
            # Write the image to a string
            try:
                s = StringIO()
            except:
                s = BytesIO()
            scipy.misc.toimage(img).save(s, format="png")

            # Create an Image object
            img_sum = tf.Summary.Image(encoded_image_string=s.getvalue(),
                                       height=img.shape[0],
                                       width=img.shape[1])
            # Create a Summary value
            img_summaries.append(tf.Summary.Value(tag='%s/%d' % (tag, i), image=img_sum))

        # Create and write Summary
        summary = tf.Summary(value=img_summaries)
        self.writer.add_summary(summary, step)
        
    def histo_summary(self, tag, values, step, bins=1000):
        """Log a histogram of the tensor of values."""

        # C
### PyTorch基础教程入门指南 #### 什么是PyTorchPyTorch 是一个开源的机器学习框架,广泛应用于深度学习领域。它的设计目标是简化开发流程并提供高效的计算能力[^3]。 #### PyTorch的基本元素 PyTorch 的核心组件之一是 `Tensor`,它是类似于 NumPy 数组的数据结构,支持多维数组操作以及 GPU 加速功能[^4]。 以下是创建和操作 Tensor 的简单示例: ```python import torch # 创建一个二维全1张量 x = torch.ones(2, 2) # 将张量移动到GPU (如果可用) if torch.cuda.is_available(): device = torch.device('cuda') x = x.to(device) print(x) ``` #### 自动求导机制 PyTorch 提供了一个强大的自动求导工具——`autograd`,用于动态图的梯度计算。通过设置 `requires_grad=True`,可以跟踪张量上的所有操作,并自动生成梯度[^1]。 下面是一个简单的例子展示如何使用自动求导来计算梯度: ```python x = torch.ones(2, 2, requires_grad=True) # 设置 requires_grad=True y = x + 2 z = y * y * 3 out = z.mean() # 反向传播计算梯度 out.backward() print(x.grad) # 输出 x 的梯度 ``` #### 构建神经网络 在 PyTorch 中,可以通过继承 `nn.Module` 类来自定义神经网络结构。以下是一个简单的线性回归模型实现: ```python import torch.nn as nn import torch.optim as optim class SimpleNet(nn.Module): def __init__(self): super(SimpleNet, self).__init__() self.fc = nn.Linear(2, 1) # 输入维度为2,输出维度为1 def forward(self, x): return self.fc(x) net = SimpleNet() criterion = nn.MSELoss() # 定义损失函数 optimizer = optim.SGD(net.parameters(), lr=0.01) # 定义优化器 # 假设输入数据和标签 inputs = torch.randn(3, 2) labels = torch.randn(3, 1) for epoch in range(5): # 进行5次迭代 optimizer.zero_grad() # 清零梯度 outputs = net(inputs) # 前向传播 loss = criterion(outputs, labels) # 计算损失 loss.backward() # 反向传播 optimizer.step() # 更新权重 print(f'Final Loss: {loss.item()}') # 打印最终损失 ``` #### 使用TensorBoard可视化 为了更好地监控训练过程,可以集成 TensorBoard 工具进行日志记录和可视化[^2]。以下是如何配置 TensorBoard 的代码片段: ```python from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter('runs/simple_net_experiment') # 添加标量数据到TensorBoard for i in range(100): writer.add_scalar('Loss/train', loss.item(), i) writer.close() ``` --- ###
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值