深度学习指标可视化案例

在这里插入图片描述

  1. TensorBoard

    • 代码案例:
      from torch.utils.tensorboard import SummaryWriter
      import torch
      import torchvision
      from torchvision import datasets, transforms
      
      # 设置TensorBoard日志路径
      writer = SummaryWriter('runs/mnist')
      
      # 加载数据集
      transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
      trainset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=True, transform=transform)
      trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
      
      # 添加图像到TensorBoard
      images, labels = next(iter(trainloader))
      img_grid = torchvision.utils.make_grid(images)
      writer.add_image('mnist_images', img_grid)
      writer.close()
      
      此代码展示了如何使用TensorBoard记录和可视化图像数据。
  2. t-SNE降维可视化

    • 代码案例:
      from sklearn.manifold import TSNE
      from sklearn.datasets import load_iris
      import matplotlib.pyplot as plt
      
      # 加载数据
      iris = load_iris()
      X = iris.data
      y = iris.target
      
      # t-SNE降维
      tsne = TSNE(n_components=2, random_state=42)
      X_tsne = tsne.fit_transform(X)
      
      # 可视化
      plt.figure(figsize=(8, 8))
      colors = ['red', 'green', 'blue']
      for i in range(len(colors)):
          plt.scatter(X_tsne[y == i, 0], X_tsne[y == i, 1], c=colors[i], label=iris.target_names[i])
      plt.legend()
      plt.show()
      
      此代码使用t-SNE将鸢尾花数据集从4维降至2维,并进行可视化。
  3. 特征图可视化

    • 代码案例:
      import torch
      import torchvision.models as models
      import torchvision.transforms as transforms
      from PIL import Image
      import matplotlib.pyplot as plt
      
      # 加载预训练模型
      model = models.resnet18(pretrained=True)
      model.eval()
      
      # 加载图像
      img = Image.open('path_to_image.jpg')
      transform = transforms.Compose([transforms.Resize(256),
                                      transforms.CenterCrop(224),
                                      transforms.ToTensor(),
                                      transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
      img = transform(img).unsqueeze(0)
      
      # 获取特征图
      with torch.no_grad():
          features = model.conv1(img)
          features = features.squeeze(0)
      
      # 可视化特征图
      fig, ax = plt.subplots(1, 3, figsize=(15, 5))
      for i in range(3):
          ax[i].imshow(features[i].cpu().numpy(), cmap='viridis')
          ax[i].axis('off')
      plt.show()
      
      此代码展示了如何提取并可视化ResNet模型中的特征图。
  4. 混淆矩阵和ROC曲线可视化

    • 代码案例:
      from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, roc_curve, auc
      import matplotlib.pyplot as plt
      
      # 假设y_true是真实标签,y_pred是预测标签,y_scores是预测概率
      y_true = [0, 1, 0, 1, 0, 1, 0, 1]
      y_pred = [0, 0, 0, 1, 0, 1, 1, 1]
      y_scores = [0.1, 0.4, 0.35, 0.8, 0.2, 0.7, 0.6, 0.9]
      
      # 绘制混淆矩阵
      cm = confusion_matrix(y_true, y_pred)
      disp = ConfusionMatrixDisplay(confusion_matrix=cm)
      disp.plot(cmap=plt.cm.Blues)
      plt.title('Confusion Matrix')
      plt.show()
      
      # 绘制ROC曲线
      fpr, tpr, _ = roc_curve(y_true, y_scores)
      roc_auc = auc(fpr, tpr)
      plt.plot(fpr, tpr, color='blue', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
      plt.plot([0, 1], [0, 1], color='gray', linestyle='--')
      plt.title('Receiver Operating Characteristic (ROC) Curve')
      plt.xlabel('False Positive Rate')
      plt.ylabel('True Positive Rate')
      plt.legend(loc='lower right')
      plt.show()
      
      此代码展示了如何绘制混淆矩阵和ROC曲线。
  5. Neptune团队协作

    • 代码案例:
      import neptune.new as neptune
      from sklearn.model_selection import train_test_split
      from sklearn.linear_model import LogisticRegression
      from sklearn.metrics import accuracy_score
      
      # 初始化Neptune项目
      run = neptune.init_run(project="your_project_name", api_token="your_api_token")
      
      # 记录实验参数
      params = {"n_estimators": 100, "learning_rate": 0.1}
      run["parameters"] = params
      
      # 加载数据
      X, y = load_data()
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
      
      # 训练模型
      model = LogisticRegression()
      model.fit(X_train, y_train)
      y_pred = model.predict(X_test)
      accuracy = accuracy_score(y_test, y_pred)
      
      # 记录模型性能
      run["accuracy"] = accuracy
      
      # 保存模型
      run["model"].upload("model.pkl")
      
      # 结束实验
      run.stop()
      
      此代码展示了如何使用Neptune记录实验参数、模型性能和模型文件。
  6. WandB

    • 代码案例:
      import wandb
      import torch
      import torch.nn as nn
      import torch.optim as optim
      from torch.utils.data import DataLoader
      from torchvision import datasets, transforms
      
      # 初始化WandB项目
      wandb.init(project="your_project_name")
      
      # 加载数据集
      transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
      trainset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=True, transform=transform)
      trainloader = DataLoader(trainset, batch_size=64, shuffle=True)
      
      # 定义模型
      model = nn.Sequential(nn.Linear(784, 128),
                            nn.ReLU(),
                            nn.Linear(128, 64),
                            nn.ReLU(),
                            nn.Linear(64, 10),
                            nn.LogSoftmax(dim=1))
      criterion = nn.NLLLoss()
      optimizer = optim.SGD(model.parameters(), lr=0.003)
      
      # 训练模型
      epochs = 5
      for epoch in range(epochs):
          running_loss = 0
          for images, labels in trainloader:
              images = images.view(images.shape[0], -1)
              optimizer.zero_grad()
              output = model(images)
              loss = criterion(output, labels)
              loss.backward()
              optimizer.step()
              running_loss += loss.item()
          wandb.log({"loss": running_loss / len(trainloader)})
          print(f"Epoch {epoch+1}/{epochs}, Loss: {running_loss / len(trainloader)}")
      
      # 结束WandB实验
      wandb.finish()
      
      此代码展示了如何使用WandB记录训练过程中的损失。
  7. VisualDL(PaddlePaddle)

    • 代码案例:
      import paddle
      from paddle.vision.models import resnet18
      from paddle.vision.datasets import Cifar10
      from paddle.vision.transforms import Compose, Normalize
      from visualdl import LogWriter
      
      # 初始化VisualDL日志
      log_writer = LogWriter("log")
      
      # 加载数据集
      transform = Compose([Normalize(mean=[127.5, 127.5, 127.5], std=[127.5, 127.5, 127.5], data_format='HWC')])
      train_dataset = Cifar10(mode='train', transform=transform)
      train_loader = paddle.io.DataLoader(train_dataset, batch_size=64, shuffle=True)
      
      # 定义模型
      model = resnet18(pretrained=True)
      criterion = paddle.nn.CrossEntropyLoss()
      optimizer = paddle.optimizer.Adam(parameters=model.parameters(), learning_rate=0.001)
      
      # 训练模型
      epochs = 5
      for epoch in range(epochs):
          for i, (images, labels) in enumerate(train_loader()):
              output = model(images)
              loss = criterion(output, labels)
              loss.backward()
              optimizer.step()
              optimizer.clear_grad()
              log_writer.add_scalar(tag="loss", step=i + epoch * len(train_loader()), value=loss.numpy())
          print(f"Epoch {epoch+1}/{epochs}, Loss: {loss.numpy()[0]}")
      
      此代码展示了如何使用VisualDL记录PaddlePaddle模型训练过程中的损失。
  8. 高维特征降维可视化(PCA)

    • 代码案例:
      from sklearn.decomposition import PCA
      from sklearn.datasets import load_iris
      import matplotlib.pyplot as plt
      
      # 加载数据
      iris = load_iris()
      X = iris.data
      y = iris.target
      
      # PCA降维
      pca = PCA(n_components=2)
      X_pca = pca.fit_transform(X)
      
      # 可视化
      plt.figure(figsize=(8, 8))
      colors = ['red', 'green', 'blue']
      for i in range(len(colors)):
          plt.scatter(X_pca[y == i, 0], X_pca[y == i, 1], c=colors[i], label=iris.target_names[i])
      plt.legend()
      plt.show()
      
      此代码使用PCA将鸢尾花数据集从4维降至2维,并进行可视化。
  9. 特征图可视化(卷积层)

    • 代码案例:
      import torch
      import torch.nn as nn
      import torchvision.models as models
      import torchvision.transforms as transforms
      from PIL import Image
      import matplotlib.pyplot as plt
      
      # 加载预训练模型
      model = models.resnet18(pretrained=True)
      model.eval()
      
      # 加载图像
      img = Image.open('path_to_image.jpg')
      transform = transforms.Compose([
          transforms.Resize(256),
          transforms.CenterCrop(224),
          transforms.ToTensor(),
          transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
      ])
      img = transform(img).unsqueeze(0)
      
      # 获取特征图
      with torch.no_grad():
          features = model.conv1(img)
          features = features.squeeze(0)
      
      # 可视化特征图
      fig, ax = plt.subplots(1, 3, figsize=(15, 5))
      for i in range(3):
          ax[i].imshow(features[i].cpu().numpy(), cmap='viridis')
          ax[i].axis('off')
      plt.show()
      
      此代码展示了如何提取并可视化ResNet模型中的特征图。通过选择不同的卷积层(如model.layer1model.layer2等),可以进一步探索模型在不同层次提取的特征。
  10. Grad-CAM 可视化

    • 代码案例:
      import cv2
      import numpy as np
      import torch
      import torch.nn as nn
      import torchvision.models as models
      import torchvision.transforms as transforms
      from PIL import Image
      import matplotlib.pyplot as plt
      
      # 加载预训练模型
      model = models.resnet18(pretrained=True)
      model.eval()
      
      # 加载图像
      img = Image.open('path_to_image.jpg')
      transform = transforms.Compose([
          transforms.Resize(256),
          transforms.CenterCrop(224),
          transforms.ToTensor(),
          transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
      ])
      img_tensor = transform(img).unsqueeze(0)
      
      # 获取模型的最后一个卷积层的输出
      def get_last_conv_layer(model):
          for name, module in model.named_modules():
              if isinstance(module, nn.Conv2d):
                  last_conv_layer = module
          return last_conv_layer
      
      last_conv_layer = get_last_conv_layer(model)
      
      # 前向传播
      outputs = []
      def hook(module, input, output):
          outputs.append(output)
      handle = last_conv_layer.register_forward_hook(hook)
      
      with torch.no_grad():
          output = model(img_tensor)
          handle.remove()
      
      # 获取特征图和类别权重
      feature_map = outputs[0].squeeze(0).cpu().numpy()
      weights = model.fc.weight.data.cpu().numpy()
      
      # 计算 Grad-CAM
      class_idx = torch.argmax(output).item()
      cam = np.zeros(feature_map.shape[1:], dtype=np.float32)
      for i, w in enumerate(weights[class_idx]):
          cam += w * feature_map[i, :, :]
      
      cam = cv2.resize(cam, (224, 224))
      cam = np.maximum(cam, 0)
      cam = cam / np.max(cam)
      
      # 可视化
      img = cv2.imread('path_to_image.jpg')
      img = cv2.resize(img, (224, 224))
      heatmap = cv2.applyColorMap(np.uint8(255 * cam), cv2.COLORMAP_JET)
      heatmap = cv2.cvtColor(heatmap, cv2.COLOR_BGR2RGB)
      superimposed_img = heatmap * 0.4 + img * 0.6
      
      plt.imshow(superimposed_img.astype(np.uint8))
      plt.axis('off')
      plt.show()
      
      此代码通过 Grad-CAM 生成热力图,可视化模型对输入图像的注意力区域。
  11. 混淆矩阵和 ROC 曲线可视化

    • 代码案例:
      from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, roc_curve, auc
      import matplotlib.pyplot as plt
      
      # 假设 y_true 是真实标签,y_pred 是预测标签,y_scores 是预测概率
      y_true = [0, 1, 0, 1, 0, 1, 0, 1]
      y_pred = [0, 0, 0, 1, 0, 1, 1, 1]
      y_scores = [0.1, 0.4, 0.35, 0.8, 0.2, 0.7, 0.6, 0.9]
      
      # 绘制混淆矩阵
      cm = confusion_matrix(y_true, y_pred)
      disp = ConfusionMatrixDisplay(confusion_matrix=cm)
      disp.plot(cmap=plt.cm.Blues)
      plt.title('Confusion Matrix')
      plt.show()
      
      # 绘制 ROC 曲线
      fpr, tpr, _ = roc_curve(y_true, y_scores)
      roc_auc = auc(fpr, tpr)
      plt.plot(fpr, tpr, color='blue', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
      plt.plot([0, 1], [0, 1], color='gray', linestyle='--')
      plt.title('Receiver Operating Characteristic (ROC) Curve')
      plt.xlabel('False Positive Rate')
      plt.ylabel('True Positive Rate')
      plt.legend(loc='lower right')
      plt.show()
      
      此代码展示了如何绘制混淆矩阵和 ROC 曲线,用于评估分类模型的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/961988.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI时序预测: iTransformer算法代码深度解析

在之前的文章中,我对iTransformer的Paper进行了详细解析,具体文章如下: 文章链接:深度解析iTransformer:维度倒置与高效注意力机制的结合 今天,我将对iTransformer代码进行解析。回顾Paper,我…

Java内存模型 volatile 线程安全

目录 Java内存模型可见性例子和volatilevolatile如何保证可见性原子性与单例模式i非原子性 线程安全 Java内存模型 参考学习: Java Memory Model外文文档 CPU与内存,可参考:https://blog.csdn.net/qq_26437925/article/details/145303267 Java线程与内…

【FreeRTOS 教程 三】协程状态、优先级、实现及调度

目录 一、协程介绍: (1)协程的特点: (2)协程的优势: 二、协程状态: (1)协程状态说明: (2)协程状态图示:…

堆的存储(了解)

由于堆是⼀个完全⼆叉树,因此可以⽤⼀个数组来存储。(如果不清楚大家可以回顾⼆叉树的存储(上)c文章里的顺序存储) 结点下标为 i : 如果⽗存在,⽗下标为 i/2 ; 如果左孩⼦存在&…

谭浩强C语言程序设计(3) 7章

1、递归实现N的阶乘 c复制 #include <cstdio> // 包含标准输入输出库// 计算n的阶乘 int total 0; // 定义全局变量total用于存储阶乘结果// 递归函数计算阶乘 int fac(int a){// 如果输入的数小于0&#xff0c;输出错误信息if (a < 0){printf("%d < 0,err…

WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用

WPF基础 | WPF 常用控件实战&#xff1a;Button、TextBox 等的基础应用 一、前言二、Button 控件基础2.1 Button 的基本定义与显示2.2 按钮样式设置2.3 按钮大小与布局 三、Button 的交互功能3.1 点击事件处理3.2 鼠标悬停与离开效果3.3 按钮禁用与启用 四、TextBox 控件基础4.…

MATLAB的数据类型和各类数据类型转化示例

一、MATLAB的数据类型 在MATLAB中 &#xff0c;数据类型是非常重要的概念&#xff0c;因为它们决定了如何存储和操作数据。MATLAB支持数值型、字符型、字符串型、逻辑型、结构体、单元数组、数组和矩阵等多种数据类型。MATLAB 是一种动态类型语言&#xff0c;这意味着变量的数…

模型I/O

文章目录 什么是模型I/O模型I/O功能之输出解析器输出解析器的功能输出解析器的使用Pydantic JSON输出解析器结构化输出解析器 什么是模型I/O 模型I/O在所有LLM应用中&#xff0c;核心元素无疑都是模型本身。与模型进行有效的交互是实现高效、灵活和可扩展应用的关键。LangChain…

docker安装Redis:docker离线安装Redis、docker在线安装Redis、Redis镜像下载、Redis配置、Redis命令

一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull redis:7.4.0 2、离线包下载 两种方式&#xff1a; 方式一&#xff1a; -&#xff09;在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -&#xff09;导出 # 导出镜像…

QT串口通信,实现单个温湿度传感器数据的采集

1、硬件设备 RS485中继器(一进二出),usb转485模块、电源等等 => 累计115元左右。 2、核心代码 #include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::

android主题设置为..DarkActionBar.Bridge时自定义DatePicker选中日期颜色

安卓自定义DatePicker选中日期颜色 背景&#xff1a;解决方案&#xff1a;方案一&#xff1a;方案二&#xff1a;实践效果&#xff1a; 背景&#xff1a; 最近在尝试用原生安卓实现仿element-ui表单校验功能&#xff0c;其中的的选择日期涉及到安卓DatePicker组件的使用&#…

6.工厂模式(Factory Method)

定义 通过“对象创建” 模式绕开new&#xff0c;来避免对象创建&#xff08;new&#xff09;过程中所导致的紧耦合&#xff08;依赖具体类&#xff09;&#xff0c;从而支持对象创建的稳定。它是接口抽象之后的第一步工作。 动机 在软件系统中&#xff0c;经常面临着创建对象…

Java CAS操作

通过前面的学习认识到了CPU缓存&#xff0c;Java内存模型&#xff0c;以及线程安全的原子、可见、顺序三大特性。本文则重点认识CAS操作&#xff0c;这是Java并发编程常见的一个操作&#xff0c;AbstractQueuedSynchronizer基于此操作提供了丰富的同步器和各种锁。 CAS&#x…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.25 视觉风暴:NumPy驱动数据可视化

1.25 视觉风暴&#xff1a;NumPy驱动数据可视化 目录 #mermaid-svg-i3nKPm64ZuQ9UcNI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-i3nKPm64ZuQ9UcNI .error-icon{fill:#552222;}#mermaid-svg-i3nKPm64ZuQ9UcNI …

鸟瞰欧洲(意境欧洲) 第一季

目录 《鸟瞰欧洲 第一季》纪录片笔记一、基本信息二、详细内容&#xff08;一&#xff09;剧集设置&#xff08;二&#xff09;各国亮点1. **荷兰**2. **意大利**3. **德国**4. **英国**5. **西班牙**6. **波兰** &#xff08;三&#xff09;拍摄特色 三、特色与评价四、总结五…

【MQ】探索 Kafka

高性能 消息的顺序性、顺序写磁盘 零拷贝 RocketMQ内部主要是使用基于mmap实现的零拷贝&#xff0c;用来读写文件 减少cpu的拷贝次数和上下文切换次数&#xff0c;实现文件的高效读写操作 Kafka 零拷贝 Kafka 使用到了 mmap 和 sendfile 的方式来实现零拷贝。分别对应 Jav…

供应链系统设计-供应链中台系统设计(十一)- 清结算中心概念片篇

概述 上篇供应链系统设计-供应链中台系统设计&#xff08;十&#xff09;- 清结算中心概念片篇文中提到了什么是金融客户、资金账号、资金账户、以及资金账号和资金账户的关系&#xff0c;如下图所示&#xff1a; 这些对于清算和结算来说都是前置的概念&#xff0c;本篇文章我…

allegro修改封闭图形线宽

说在前面 我们先把最优解说在前面,然后后面再说如果当时不熟悉软件的时候为了挖孔是用了shapes该怎么修改回来。 挖空最方便的方式是在cutout层画一个圆弧,下面开始图解,先add一个圆弧 z 最好是在画的时候就选择好层,如果忘记了后续再换回去也行,但好像软件有bug,此处并…

使用scikit-learn中的KNN包实现对鸢尾花数据集的预测

引言 K最近邻&#xff08;KNN&#xff09;算法是一种简单且直观的分类算法。它通过计算数据点之间的距离来对新样本进行分类。鸢尾花数据集是一个经典的机器学习数据集&#xff0c;包含了三种不同类型的鸢尾花&#xff0c;每种类型由四个特征&#xff08;花萼长度、花萼宽度、…

Hive:静态分区(分区语法,多级分区,分区的查看修改增加删除)

hive在建表时引入了partition概念。即在建表时&#xff0c;将整个表存储在不同的子目录中&#xff0c;每一个子目录对应一个分区。在查询时&#xff0c;我们就可以指定分区查询&#xff0c;避免了hive做全表扫描&#xff0c;从而提高查询率。 oracle和Hive分区的区别 orcale在…