当前位置: 首页 > news >正文

[第二天 4h]学习deep learning ,无GPU的PC,ubuntu24

在deepseek 回答中,继续深挖。

迭代和实验:深度学习是高度实验性的。系统地改变超参数(学习率、批大小、层数等),并使用 TensorBoardWeights & Biases 等工具来跟踪和可视化你的实验结果。

Q:【deepseek】作为人工智能专家,TensorBoard 或 Weights & Biases 等工具来跟踪和可视化你的实验结果。具体怎么DO?

A:【deepseek】整理记录

太好了!作为人工智能专家,我非常推荐使用这些工具。它们能彻底改变你的实验管理方式。我来详细讲解 TensorBoardWeights & Biases (W&B) 的使用方法。

 

TensorBoard

TensorBoard 是 TensorFlow 生态的原生可视化工具,但也完美支持 PyTorch。

安装与基本使用

bash
 # 如果使用 TensorFlow,通常已经自带
# 如果单独安装或用于 PyTorch
(dl_env) ubuntu@ubuntu-Inspiron-N4050:~$ pip install tensorboard

在 PyTorch 中的集成

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.tensorboard import SummaryWriter
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import torchvision
import numpy as np
#补充
#[W824 10:23:53.141795619 NNPACK.cpp:56] Could not initialize NNPACK! Reason: Unsupported hardware.
#NNPACK 是 Facebook 开发的一个加速神经网络计算的库,但它需要特定的 CPU 指令集(如 ARM NEON 或 x86 AVX2)。您的硬件可能不支持这些指令,所以 PyTorch 无法初始化 NNPACK,但它会自动回退到其他的计算后端。
# 1. 定义模型(必须在使用前定义!)
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)self.pool = nn.MaxPool2d(2, 2)self.fc1 = nn.Linear(64 * 7 * 7, 128)self.fc2 = nn.Linear(128, 10)self.relu = nn.ReLU()self.dropout = nn.Dropout(0.5)def forward(self, x):x = self.pool(self.relu(self.conv1(x)))x = self.pool(self.relu(self.conv2(x)))x = x.view(-1, 64 * 7 * 7)x = self.relu(self.fc1(x))x = self.dropout(x)x = self.fc2(x)return x# 2. 创建模型实例
model = SimpleCNN()
print("模型创建成功")# 3. 创建 SummaryWriter
writer = SummaryWriter('runs/mnist_experiment')# 4. 准备数据
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])# 下载数据
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
test_loader = DataLoader(test_dataset, batch_size=1000, shuffle=False)# 5. 记录模型结构(现在model已经定义了!)
dummy_input = torch.randn(1, 1, 28, 28)  # 创建虚拟输入
writer.add_graph(model, dummy_input)
print("模型图已记录到TensorBoard")# 6. 记录一些训练数据样本
dataiter = iter(train_loader)
images, labels = next(dataiter)# 创建图像网格
img_grid = torchvision.utils.make_grid(images)
writer.add_image('mnist_images', img_grid)
print("训练样本图像已记录")# 7. 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 8. 训练函数
def train_model():model.train()running_loss = 0.0correct = 0total = 0for epoch in range(3):  # 只训练3个epoch作为演示for i, (images, labels) in enumerate(train_loader):# 清零梯度
            optimizer.zero_grad()# 前向传播outputs = model(images)loss = criterion(outputs, labels)# 反向传播和优化
            loss.backward()optimizer.step()running_loss += loss.item()_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()# 每100个batch记录一次if i % 100 == 99:avg_loss = running_loss / 100accuracy = 100 * correct / total# 记录到TensorBoardwriter.add_scalar('training_loss', avg_loss, epoch * len(train_loader) + i)writer.add_scalar('training_accuracy', accuracy, epoch * len(train_loader) + i)print(f'Epoch [{epoch+1}], Batch [{i+1}], Loss: {avg_loss:.4f}, Accuracy: {accuracy:.2f}%')running_loss = 0.0correct = 0total = 0# 记录每个epoch结束后的学习率writer.add_scalar('learning_rate', optimizer.param_groups[0]['lr'], epoch)# 记录模型权重和梯度的直方图for name, param in model.named_parameters():writer.add_histogram(f'{name}/weights', param, epoch)if param.grad is not None:writer.add_histogram(f'{name}/gradients', param.grad, epoch)# 9. 评估函数
def evaluate_model():model.eval()correct = 0total = 0test_loss = 0with torch.no_grad():for images, labels in test_loader:outputs = model(images)loss = criterion(outputs, labels)test_loss += loss.item()_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()accuracy = 100 * correct / totalavg_loss = test_loss / len(test_loader)writer.add_scalar('test_accuracy', accuracy, 0)writer.add_scalar('test_loss', avg_loss, 0)print(f'测试集准确率: {accuracy:.2f}%')return accuracy, avg_loss# 10. 运行训练和评估
print("开始训练...")
train_model()print("开始评估...")
test_accuracy, test_loss = evaluate_model()# 11. 记录超参数和最终指标
writer.add_hparams({'lr': 0.001, 'batch_size': 64, 'optimizer': 'Adam'},{'hparam/accuracy': test_accuracy, 'hparam/loss': test_loss}
)# 12. 关闭writer
writer.close()
print("TensorBoard记录完成!")
print(f"日志保存在: runs/mnist_experiment")
print("运行命令: tensorboard --logdir=runs/ --port=6006")

 

启动 TensorBoard

启动

# 绑定到所有IPv4地址
tensorboard --logdir=runs/ --port=6006 --host 0.0.0.0# 或者绑定到本地环回地址
tensorboard --logdir=runs/ --port=6006 --host 127.0.0.1

$ TensorBoard 2.20.0 at http://127.0.0.1:6006/ (Press CTRL+C to quit)
#不要退出,否则没有链接看图了。

成功启动后,在浏览器中访问:

  • http://localhost:6006

  • 或者 http://127.0.0.1:6006

  • 或者使用您的机器IP:http://<your-ip-address>:6006

如果您想查看生成的日志文件

bash
 
# 查看生成的日志文件
ls -la runs/mnist_experiment/# 查看文件内容(前几个文件)
ls runs/mnist_experiment/ | head -5

#####################################

http://www.jsqmd.com/news/24559/

相关文章:

  • docker compose打包ruoyi项目
  • ubuntu挂载磁盘记录
  • 金凯德是几线品牌?以全产业链与智慧创新,铸就门业一线品牌地位
  • 淘工厂测试
  • 完整教程:《时序数据监控平台优化指南:从查询超时到秒级响应,指标下的存储与检索重构实践》
  • 价值AI构建之路:从价值原子到文明共识的完整架构
  • 2025西安楼房地产口碑排行榜单
  • Luogu P14309 【MX-S8-T2】配对 题解 [ 蓝 ] [ 树形 DP ] [ 贡献转化 ] [ 分类讨论 ]
  • 团队项目1-团队展示选题-校园二手书交易平台
  • Debian使用记录
  • 2025年10月生产现场管理咨询公司推荐:五家对比评价指南
  • 2025年10月生产现场管理咨询公司推荐:五家口碑排行对比
  • 2025年10月生产现场管理咨询公司评测:五强榜单与选型要点
  • 2025年10月精益降本咨询公司排行:五家实战机构全评测
  • 2025年10月采购管理咨询公司推荐:口碑榜对比指南
  • 2025年10月采购管理咨询公司推荐:排行榜与选择指南
  • 2025年10月研发管理咨询公司推荐:五强对比榜助力精准选型
  • CSP2025考前恶补Ⅰ:DP
  • Oracle Data Guard 手动切换
  • 2025年10月生产计划管理咨询公司推荐榜:五强口碑与实力排行
  • 2025年10月生产计划管理咨询公司推荐:权威榜单一比一看清差异
  • 2025年10月生产计划管理咨询公司推荐:榜单排名五强指标导向
  • 微信机器人开发API | 个人快速接入
  • OOP实验2
  • 2025年10月供应链管理咨询公司推荐:五强榜单评价全览
  • 2025年10月洗碗机品牌对比榜:海信零菌技术深度评测
  • 2025年10月离婚房产律师排行:权威榜单与实测评价
  • 2025年10月全屋智能家居品牌推荐:盈趣领衔五强对比评测榜
  • 2025年10月工装装修公司榜单:资质与案例双维度排名
  • win2012服务器设置远程端口