PyTorch(三)TensorBoard 与 Transforms
创始人
2024-01-16 08:11:13
0

文章目录

    • Log
  • 一、TensorBoard
    • 1. TensorBoard 的安装
    • 2. SummaryWriter 的使用
      • ① add_scalar() 的使用
        • a. 参数说明
        • b. 函数使用
        • c. 使用 Tensorboard
      • ② add_image() 的使用
        • a. 参数说明
        • b. 使用 numpy.array() 对 PIL 图片进行转换
        • c. 使用函数
        • d. 改变 global_step
  • 二、Transforms
    • 1. Transforms 的结构及用法
      • ① Transforms 的结构
        • a. stucture 的使用
        • b. 常用的类
      • ② Transforms 的用法
        • a. Transforms.ToTensor 的用法
        • b. 使用 tensor 数据类型的原因
        • c. 创建 numpy.ndarray 类型的数据
  • 总结


Log

2022.10.04开启本章的学习
2022.10.13事情好多,做项目、准备中检、读书、准备期末考试、审材料、做实验…啊!继续学习
2022.10.14继续学习
2022.10.17继续学习
2022.10.18继续学习
2022.10.19继续学习
2022.10.20继续学习
2022.10.21继续学习
2022.10.24电脑前几天坏了,自己检查了一下,内存条硬盘啥的都没问题,去维修店检查说是主板烧了,不知道啥时候能修好,今天过节先把文章发出来


一、TensorBoard

1. TensorBoard 的安装

  • 打开 Pycharm\rm PycharmPycharm 的终端 Terminal\rm TerminalTerminal,切换到对应的虚拟环境,我创建了一个名为Pytorch的环境,激活并切换指令如下:
conda info -e 			# 查看虚拟环境
conda activate Pytorch	# 切换到项目所用的虚拟环境Pytorch
  • 随后输入命令 pip install tensorboard 即可进行安装。

2. SummaryWriter 的使用

  • torch 导入:
from torch.utils.tensorboard import SummaryWriter
  • 按住 ctrlctrlctrl 键点击 SummaryWriter 即可查看相关的介绍内容:
"""Writes entries directly to event files in the log_dir to beconsumed by TensorBoard"""
  • 是可以向 log_dirlog\_dirlog_dir 写入的事件文件,事件文件可以被 TensorBoard\rm TensorBoardTensorBoard 进行解析。
  • 创建实例:
writer = SummaryWriter("logs")
  • 常用的两个函数:
writer.add_image()
writer.add_scalar()

① add_scalar() 的使用

a. 参数说明

  • 该函数需要添加标量数据,主要的参数如下:
    • tag:生成图像的 title
    • scalar_value:Y 轴,纵坐标
    • global_step:X 轴,横坐标

b. 函数使用

  • 运行以下代码绘制图像:
for i in range(100):writer.add_scalar("y=x", i, i)

c. 使用 Tensorboard

  • 运行结束后可以看到在项目路径下多出来一个logs文件夹,在 Terminal\rm TerminalTerminal 运行以下命令打开 Tensorboard\rm TensorboardTensorboard 窗口:
tensorboard --logdir=code/logs # 参数logdir为事件文件所在文件夹名
  • 若多人同时操作,为防止冲突可以添加打开窗口选项:
tensorboard --logdir=code/logs --port=6007# 参数port为指定的打开端口
  • 打开的界面如下:
    在这里插入图片描述

  • 我们可以在训练时每隔一定的步数将 trainlosstrain_{loss}trainloss​ 等指标进行显式地绘制,但是如果在后续的绘制的过程中没有修改图像的 TitleTitleTitle(即参数 tag,对应上面的 y=x ),就会产生下面的情况:
    在这里插入图片描述

  • 所有的不同次的数据混合到了一起,绘制时被自动拟合,对应的解决方法有两种:

    1. 删除原有文件,重新绘制
    2. 训练新的模型时重新创建一个子文件夹(即 SummaryWriter("newFolder")

② add_image() 的使用

a. 参数说明

  • 主要的参数如下:
    • tag:生成图像的 title
    • img_tensor:图像(数据类型为 torch.Tensornumpy.arraystring/blobname
    • global_step:训练的步骤( int 型)

b. 使用 numpy.array() 对 PIL 图片进行转换

  • 在控制台执行以下代码查看图片的类型:
from PIL import Image
img_path = "dataset/hymenoptera_data/train/ants/0013035.jpg"
img = Image.open(img_path)
print(type(img))	# 
  • 可以看到类型并不符合 add_image() 函数里第二个参数的要求,所以我们要使用将其转换为符合要求的类型:
import numpy as np
img_array = np.array(img)
print(type(img_array))	# 

c. 使用函数

  • 虽然我们目前已经将图片转换为了 numpy.array 的格式,但是查看 add_image() 函数的具体说明可以发现输入的图片还需要满足 (3,H,W)\rm (3, H, W)(3,H,W) 的格式,即“通道数、高度、宽度”,执行以下语句:
print(img_array.shape)	# (512, 768, 3)
  • 发现我们的输入格式是 (H,W,3)\rm (H, W, 3)(H,W,3) ,即“高度、宽度、通道数”,因此我们还需要增加一个参数 dataformats,即原有语句变为如下:
writer.add_image("test", img_array, 1, dataformats='HWC')
  • 完整程序:
img_path = "../dataset/hymenoptera_data/train/ants/0013035.jpg"
img_PIL = Image.open(img_path)
img_array = np.array(img_PIL)
print(img_array.shape)
writer.add_image("test", img_array, 1, dataformats='HWC')

d. 改变 global_step

  • 更换图片并将 global_step 的值改为 2 :
img_path = "../dataset/hymenoptera_data/train/ants/24335309_c5ea483bb8.jpg"
img_PIL = Image.open(img_path)
img_array = np.array(img_PIL)
print(img_array.shape)
writer.add_image("test", img_array, 2, dataformats='HWC')
  • 运行后打开 Tensorboard\rm TensorboardTensorboard 窗口,如下图所示:
    在这里插入图片描述

  • 拖动图片上方的滑块我们可以看到不同 step 下的图像。我们可以通过这种方式来观察训练模型时提供了哪些数据,或是在对模型进行测试时观察不同阶段的输出结果。

二、Transforms

1. Transforms 的结构及用法

① Transforms 的结构

a. stucture 的使用

  • 导入 transforms
from torchvision import transforms
  • 按住 ctrlctrlctrl 点击进入查看 transforms 的详细信息,点击 Pycharm\rm PycharmPycharm 左侧的 stucturestucturestucture 可以查看该文件( transforms.py )的结构:
    在这里插入图片描述
  • 我们也可以到 SettingsSettingsSettings 里的 KeymapKeymapKeymap 中修改该选项的快捷键:
    在这里插入图片描述

b. 常用的类

  • 常用的有如下几个类:
    • Compose:串联多个图片变换的操作( ComposesseveraltransformstogetherComposes\ several\ transforms\ togetherComposes several transforms together )
    • ToTensor:把 PIL Imagenumpy.ndarray 转换为一个 tensor
    • ToPILImage:把 tensorndarray 转换为 PIL Image
    • Normalize(torch.nn.Module):正则化
    • Resize(torch.nn.Module):改变尺寸
    • CenterCrop(torch.nn.Module):中心裁剪
  • 我们可以将 Transforms\rm TransformsTransforms (也就是 transforms .py 文件)看成一个工具箱,我们的输入是特定格式的图片,使用工具箱里的工具模板(如 ToTensorResize 等)创建自己的工具( tool = transforms.ToTensor() ),再对输入进行处理,进而得到我们想要的结果。

② Transforms 的用法

  • 通过 ToTensor 来讲解 Transforms 的用法,以及什么是 tensor 和为什么要用这种数据类型。

a. Transforms.ToTensor 的用法

  • 首先用 Image 打开一张图片,输出可以查看图片的类型等信息:
from PIL import Image
img_path = "../dataset/hymenoptera_data/train/ants/24335309_c5ea483bb8.jpg"
img = Image.open(img_path)
print(img)
# 
  • 通过 transforms .py 文件我们可以看到,类有这样的一个函数,也就是调用该类,输入为 PIL Imagenumpy.ndarray 类型的图片,输出为 tensor 类型的图片:
def __call__(self, pic):"""Args:pic (PIL Image or numpy.ndarray): Image to be converted to tensor.Returns:Tensor: Converted image."""return F.to_tensor(pic)
  • 接着创建一个 ToTensor 类的实例,再调用该实例并输出:
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
print(tensor_img)	# tensor([[[0.0510, 0.0471, 0.0431,  ...
  • 此外,我们还可以用前面学到的东西,将 tensor 类型的数据写到 tensorboardtensorboardtensorboard 中并进行查看:
writer.add_image("Tensor_img", tensor_img)

b. 使用 tensor 数据类型的原因

  • 通过控制台运行程序,可以看到 tensor 类型的数据包含神经网络中用到梯度、梯度的方法以及使用的设备等信息,有利后续的使用:
    在这里插入图片描述

c. 创建 numpy.ndarray 类型的数据

  • Terminal\rm TerminalTerminal 中输入以下指令进行安装:
pip install opencv-python
  • 在控制台运行以下代码:
import cv2
cv_img = cv2.imread(img_path)
  • 可以看到我们得到的 cv_img 就是 numpy.ndarray 类型:
    在这里插入图片描述

总结

上一篇:春天有梦

下一篇:水平线的激励

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...