pytorch训练模型实时可视化loss

这篇博客介绍了如何使用Visdom进行远程服务器上的训练过程可视化。首先,讲解了visdom的基本使用步骤,接着阐述了如何通过SSH端口映射将服务器端的visdom端口映射到本地。然后提到了在服务器后台持久运行visdom服务的方法,以便在训练任务进行时保持可视化。最后,说明了如何在本地通过特定URL访问训练过程的实时loss趋势。注意,SSH连接窗口必须保持打开以维持可视化功能。

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

  • 第一步,关于visdom的基本使用:https://blog.youkuaiyun.com/qq_39450134/article/details/121775053
  • 第二步,把服务器端的visdom端口映射到自己电脑的访问地址和端口,该命令是在自己电脑终端运行,我是Mac笔记本。
# ssh -L <local port>:localhost:<remote port> -p <port> username@remote_host
#  -p <port>  看情况,服务器的用户账号给了port就必须加,没给就只需要username和服务器IP地址(或者域名)
#  ssh时还需要输入用户密码

ssh -L 6606:localhost:8097 -p <port> username@remote_host

例如输入一下,然后输入密码:

ssh -L 8097:127.0.0.1:8097 -p 60620 ubuntu@202.201.163.152

**注:**ssh连接的窗口不能关闭,如果关闭就会导致本地的 http://localhost:8097/ 失效,无法访问

  • 第三步,在服务器端测试或者任务训练时长很短可以直接启动visdom程序
python -m visdom.server
  • 如果训练任务很长,可视化程序就需要长时间运行,需要使用如下命令把可视化程序和训练程序一样,放入服务器后台运行
<think>好的,我现在需要回答用户关于如何在PyTorch可视化模型训练的准确率(acc)和损失(loss)的问题。首先,我得回忆一下自己之前学过的相关知识,确保给出的步骤正确且清晰。 用户可能刚接触PyTorch,所以需要从基础开始解释。首先,应该提到在训练过程中记录这些指标的重要性,比如在每个epoch结束后保存loss和acc的值。然后,使用绘图库如Matplotlib来将这些值可视化。 接下来,我需要考虑具体步骤。首先,在训练循环中,每个epoch结束后,累计loss和accuracy,然后存储到列表里。比如,在每次迭代后累加loss,但可能需要在每个epoch结束时计算平均loss。同时,对于分类任务,准确率的计算通常需要比较预测结果和真实标签,统计正确的数量,然后除以总样本数。 然后,使用Matplotlib进行绘图。这里需要分两个子图,一个展示训练和验证的loss曲线,另一个展示accuracy曲线。需要确保代码示例正确,比如正确使用plt.subplots,设置标题、标签、图例等。 可能需要注意的地方包括:在模型训练时,区分训练模式和验证模式,使用with torch.no_grad()来减少内存消耗;数据需要从GPU转到CPU以便处理;还有如何将正确预测的数量累加等。 另外,用户可能需要知道如何在训练过程中同时进行验证,所以需要给出验证循环的示例。同时,要提醒用户在每个epoch结束后,将loss和acc添加到列表中,方便后续绘图。 可能还需要提到一些扩展内容,比如使用TensorBoard作为另一种可视化工具,但用户当前的问题集中在acc和loss可视化,所以主要介绍Matplotlib的方法。 需要检查代码是否有语法错误,比如是否正确缩进,是否正确使用列表的append方法,是否正确关闭绘图等。例如,在训练循环中,每个epoch结束后,将平均的loss和acc存入列表,验证部分同理。 最后,确保回答结构清晰,分步骤说明,代码示例正确,并且给出解释,帮助用户理解每一步的作用。如果有常见的错误或注意事项,也应该提及,比如不要忘记在验证时使用model.eval(),或者注意清空梯度等。</think>在PyTorch可视化训练结果的准确率(acc)和损失(loss),可以通过以下步骤实现: --- ### **步骤1:在训练过程中记录指标** 在训练循环中,需要实时记录每个epoch的**训练损失**、**训练准确率**,以及**验证损失**和**验证准确率**(如果有验证集)。 ```python import matplotlib.pyplot as plt # 初始化记录列表 train_losses = [] train_accs = [] val_losses = [] val_accs = [] for epoch in range(num_epochs): # 训练阶段 model.train() running_loss = 0.0 correct = 0 total = 0 for inputs, labels in train_loader: optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() # 累计损失和准确率 running_loss += loss.item() _, predicted = outputs.max(1) total += labels.size(0) correct += predicted.eq(labels).sum().item() # 计算并保存训练集指标 epoch_train_loss = running_loss / len(train_loader) epoch_train_acc = correct / total train_losses.append(epoch_train_loss) train_accs.append(epoch_train_acc) # 验证阶段(可选) model.eval() val_loss = 0.0 val_correct = 0 val_total = 0 with torch.no_grad(): for inputs, labels in val_loader: outputs = model(inputs) loss = criterion(outputs, labels) val_loss += loss.item() _, predicted = outputs.max(1) val_total += labels.size(0) val_correct += predicted.eq(labels).sum().item() # 保存验证集指标 epoch_val_loss = val_loss / len(val_loader) epoch_val_acc = val_correct / val_total val_losses.append(epoch_val_loss) val_accs.append(epoch_val_acc) ``` --- ### **步骤2:使用Matplotlib绘制曲线** 训练结束后,用Matplotlib绘制**Loss**和**Accuracy**的变化曲线: ```python # 创建画布和子图 fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8)) # 绘制Loss曲线 ax1.plot(train_losses, label='Train Loss') ax1.plot(val_losses, label='Val Loss') ax1.set_title('Loss Curve') ax1.set_xlabel('Epoch') ax1.set_ylabel('Loss') ax1.legend() # 绘制Accuracy曲线 ax2.plot(train_accs, label='Train Accuracy') ax2.plot(val_accs, label='Val Accuracy') ax2.set_title('Accuracy Curve') ax2.set_xlabel('Epoch') ax2.set_ylabel('Accuracy') ax2.legend() # 调整布局并显示 plt.tight_layout() plt.show() ``` --- ### **关键点解释** 1. **记录指标**: - 在训练和验证循环中,累计每个batch的`loss`和正确预测数量。 - 每个epoch结束后,计算平均损失和准确率,并存入列表。 2. **可视化方法**: - 使用`matplotlib`绘制两条曲线: - **Loss曲线**:观察模型是否过拟合(训练Loss下降但验证Loss上升)。 - **Accuracy曲线**:观察模型训练集和验证集上的性能差异。 3. **扩展功能**: - 使用**TensorBoard**(PyTorch集成`torch.utils.tensorboard`)实现动态可视化。 - 保存图像到文件:`plt.savefig('training_curves.png')` --- ### **示例输出效果** - **Loss曲线**:理想情况下,训练和验证Loss应同步下降。 - **Accuracy曲线**:训练和验证准确率应逐步上升并趋于稳定。 通过观察这些曲线,可以判断模型是否收敛、是否存在过拟合或欠拟合问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yhblog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值