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

PyTorch深度学习入门记录4

TensorBoard的使用

TensorBoard的安装 ---> 在PyCharm终端输入(若终端显示PS而不是pytorch参考下面步骤修改) ---> pip install tensorboard

powershell.exe 改为 cmd.exe

from torch.utils.tensorboard import SummaryWriter
# SummaryWriter是 TensorBoard 的 PyTorch 接口,用于向 TensorBoard 写入数据writer = SummaryWriter("logs")
# 创建SummaryWriter对象,指定日志文件保存目录为 "logs"
# 运行后会在当前工作目录下创建 "logs" 文件夹,用于存储 TensorBoard 所需的日志文件for i in range(100):writer.add_scalar("y=x", i, i)
# 调用add_scalar方法记录标量数据(只包含单一数值的简单数据,比如178cm,30kg等)
# 第一个参数 "y=x" 是曲线的标签名称,将显示在 TensorBoard 中
# 第二个参数i是要记录的标量值(y 轴数据)
# 第三个参数i是全局步数(x 轴数据)
# 这行代码的效果是记录一条 y=x 的直线数据writer.close()

搭配代码使用的的一些终端指令

tensorboard --logdir=logs:终端中启动 TensorBoard 的命令,用于可视化用SummaryWriter记录的日志数据

tensorboard --logdir=logs --port=6007:修改可视化的端口,避免和其他人冲突

练习数据集链接

图像的格式转换与导入

from torch.utils.tensorboard import SummaryWriter
# SummaryWriter是 TensorBoard 的 PyTorch 接口,用于向 TensorBoard 写入数据
import numpy as np
from PIL import Imagewriter = SummaryWriter("logs")
# 创建SummaryWriter对象,指定日志文件保存目录为 "logs"
# 运行后会在当前工作目录下创建 "logs" 文件夹,用于存储 TensorBoard 所需的日志文件
image_path = "data/train/ants_image/0013035.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(img_array)
print(img_array.shape) # HWC格式 高 宽 通道数writer.add_image("test", img_array, 1, dataformats='HWC') # 添加图像数据 默认格式为CHWfor i in range(100):writer.add_scalar("y=3x", 3*i, i)
# 调用add_scalar方法记录标量数据(只包含单一数值的简单数据,比如178cm,30kg等)
# 第一个参数 "y=x" 是曲线的标签名称,将显示在 TensorBoard 中
# 第二个参数i是要记录的标量值(y 轴数据)
# 第三个参数i是全局步数(x 轴数据)
# 这行代码的效果是记录一条 y=x 的直线数据writer.close()

 Transforms的使用

将PIL图像转换为PyTorch张量(Tensor)

# 从torchvision库中导入transforms模块,该模块提供了各种图像预处理工具
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
# 从PIL库中导入Image类,用于处理图像文件的读取和基本操作
from PIL import Image# 定义图像文件的路径,指向训练数据集中的一张蚂蚁图片
img_path = "dataset/train/ants/0013035.jpg"
# 使用PIL的Image.open()方法打开指定路径的图像文件,返回PIL图像对象
img = Image.open(img_path)writer = SummaryWriter("logs")
# 创建ToTensor类的实例,该实例用于将PIL图像或NumPy数组转换为PyTorch张量
tensor_trans = transforms.ToTensor()
# 使用创建的tensor_trans转换器,将PIL图像对象img转换为PyTorch张量
# 转换过程会自动完成:
# 1. 像素值从[0, 255]范围归一化到[0.0, 1.0]
# 2. 数据格式从HWC(高度, 宽度, 通道)转换为CHW(通道, 高度, 宽度)
tensor_img = tensor_trans(img)writer.add_image("Tensor_img", tensor_img)writer.close()# 打印转换后的张量数据,显示其形状和像素值信息
# print(tensor_img)

# 导入PIL库的Image类,用于图像的读取和基本处理
from PIL import Image
# 导入SummaryWriter类,用于将数据写入TensorBoard进行可视化
from torch.utils.tensorboard import SummaryWriter
# 导入transforms模块,提供各种图像预处理工具
from torchvision import transforms# 创建SummaryWriter实例,指定日志文件保存到"logs"目录
writer = SummaryWriter("logs")
# 使用PIL打开指定路径的蜜蜂图像,返回PIL图像对象
img = Image.open("dataset/train/bees/16838648_415acd9e3f.jpg")# 1. 演示ToTensor转换:将PIL图像转为PyTorch张量
# 创建ToTensor转换器实例
trans_totensor = transforms.ToTensor()
# 将PIL图像转换为张量(自动完成像素值归一化到[0,1]和格式转换HWC→CHW)
img_tensor = trans_totensor(img)
# 将转换后的张量图像写入TensorBoard,标签为"ToTensor"
writer.add_image("ToTensor", img_tensor)# 2. 演示Normalize(标准化)操作
# 创建Normalize转换器实例,参数为各通道的均值和标准差
# 标准化公式:output = (input - mean) / std
trans_norm = transforms.Normalize([0.1, 0.2, 0.2], [0.3, 0.4, 0.2])
# 对张量图像进行标准化处理(注意:Normalize仅接收张量作为输入)
img_norm = trans_norm(img_tensor)
# 将标准化后的图像写入TensorBoard,标签为"Normalize",全局步数为1
writer.add_image("Normalize", img_norm, 1)# 3. 演示Resize(调整图像尺寸)操作
# 打印原始PIL图像的尺寸(宽, 高)
print(img.size)
# 创建Resize转换器实例,指定目标尺寸为(512, 512)(高, 宽)
trans_resize = transforms.Resize((512, 512))
# 对PIL图像进行尺寸调整,返回调整后的PIL图像
img_resize = trans_resize(img)
# 将调整尺寸后的PIL图像转换为张量
img_resize = trans_totensor(img_resize)
# 将调整尺寸后的张量图像写入TensorBoard,标签为"Resize",全局步数为0
writer.add_image("Resize", img_resize, 0)
# 打印调整尺寸后的张量信息(包含形状和像素值)
print(img_resize)# 4. 演示Compose(组合多个转换操作)
# 创建Resize转换器实例,指定目标短边长度为512(长边按比例缩放)
trans_resize_2 = transforms.Resize(512)
# 使用Compose组合转换操作:先调整尺寸,再转为张量
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
# 对原始PIL图像依次应用组合的转换操作
img_resize_2 = trans_compose(img)
# 将处理后的图像写入TensorBoard,标签为"Resize",全局步数为1(与之前的Resize区分)
writer.add_image("Resize", img_resize_2, 1)# 5. 演示RandomCrop(随机裁剪)操作(数据增强常用)
# 创建RandomCrop转换器实例,指定裁剪尺寸为(500, 1000)(高, 宽)
# 每次调用会从原始图像中随机裁剪出指定尺寸的区域
trans_random = transforms.RandomCrop((500, 1000))
# 组合转换操作:先随机裁剪,再转为张量
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
# 循环10次,生成10张不同的随机裁剪图像
for i in range(10):img_crop = trans_compose_2(img)# 将每次裁剪的图像写入TensorBoard,标签为"RandomCrop",步数从0到9writer.add_image("RandomCrop", img_crop, i)# 关闭SummaryWriter,确保所有数据都被写入日志文件
writer.close()

标准化展示 --- 正常展示 

http://www.dtcms.com/a/301103.html

相关文章:

  • Oracle 数据库报 ora-00257 错误并且执行alter system switch logfile 命令卡死的解决过程
  • Oracle 19C RU 19.28 升级和安装
  • IndexedDB全面掌握:从入门到Odoo OWL框架实战
  • 动手学深度学习笔记04(上)
  • net8.0一键创建支持(Orm-Sqlite-MySql-SqlServer)
  • GPT 生成一个打字练习页面
  • 基于 LSTM 与 SVM 融合的时间序列预测模型:理论框架与协同机制—实践算法(1)
  • Elasticsearch - 倒排索引原理和简易实现
  • macOS 安装 Homebrew
  • 因果推断 | 元学习方法原理详解和代码实操
  • Redisson的布隆过滤器
  • MicroPython 开发ESP32应用教程 之 UART 详细讲解及应用
  • 数学建模——灰色关联分析
  • 一个MySQL的数据表最多能够存多少的数据?
  • net8.0一键创建支持(Redis)
  • GPT-4o实战应用指南:从入门到精通的技术心得
  • 【QT开发手册】 Qt界面介绍Qt程序多种实现项目文件解析
  • C语言(长期更新)第6讲:函数
  • 20250727-1-Kubernetes 网络-Ingress介绍,部署Ingres_笔记
  • Java面试精进:测试、监控与序列化技术全解析
  • Product Hunt 每日热榜 | 2025-07-27
  • 【C语言网络编程基础】TCP 服务器详解
  • 《不只是接口:GraphQL与RESTful的本质差异》
  • 机器学习的算法有哪些?
  • python优秀案例:基于python flask实现的小说文本数据分析与挖掘系统,包括K-means聚类算法和LDA主题分析
  • 系统整理Python的条件语句和常用方法
  • [ctfshow web入门]web99 in_array的弱比较漏洞
  • Java面试题及详细答案120道之(081-100)
  • OpenHarmony部件化编译最佳实践
  • 【优选算法】BFS解决FloodFill算法