1 简介
在学习李沐在B站发布的《动手学深度学习》PyTorch版本教学视频中发现在操作使用PyTorch方面有许多地方看不懂,往往只是“动手”了,没有动脑。所以打算趁着寒假的时间好好恶补、整理一下PyTorch的操作,以便跟上课程。
学习资源:
- B站up主:我是土堆的视频:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】
- PyTorch中文手册:(pytorch handbook)
- Datawhale开源内容:深入浅出PyTorch(thorough-pytorch)
2 TensorBoard
-
writer.add_scalar()
-
writer.add_image()
-
writer.close()
2.1 SummaryWriter
用于观察损失函数的变化
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs") # 事件文件存放地址
2.1.1 writer.add_scalar()
tag
:标题scalar_value
:添加的值,就是y轴global_step
:训练步数,就是x轴
for i in range(100):
writer.add_scalar("y=2x", 2*i, i) # 注意第一个2*i对应的是y,第二个i对应x
在命令行中打开tensorboard
注意在命令行要通过cd
语句更改到当前工作路径,否则会找不到事件文件夹导致tensorboard页面出现No dashboards are active for the current data set.
的错误
-
tensorboard --logdir logs --port=6007
#logdir
= 事件文件所在文件夹名;port
指定端口,避免服务器和别人冲突。 -
打开命令行中提示的网址http://localhost:6007/ 进行查看
-
想要重置图像可以通过删除已有的事件文件来达到
2.1.2 writer.add_image()
tag
:标题img_tensor
:要求图像的数据类型为torch.Tensor
,numpy.array
,string/blobname
global_step
:训练步数dataformats = 'HWC'
:图片的格式High
高度,Weight
宽度,channel
通道数;默认通道数在前
用上一篇文章中的蚂蚁蜜蜂数据集举例
从PIL
到numpy
,需要在add_image()
中指定shape
中每一个数字/维表示的含义
from PIL import Image
import numpy as np
image_path = r"F:\Data and code\data\蚂蚁蜜蜂数据\hymenoptera_data\hymenoptera_data\train\ants\0013035.jpg"
img_PIL = Image.open(image_path) # 这样读取出来的数据类型为PIL.JpegImage.......,总之不符合要求,需要转换
img_array = np.array(img_PIL) # 得到writer.add_image()函数所需要的数据类型
writer.add_image("test", img_array, 1, dataformats = 'HWC') # High高度,Weight宽度,channel通道数;默认通道数在前
在TensorBoard里面image里面则可以看到第1步的图片
标题"test"不变的话,添加图片增加步数,则新图片添加到原图片的后一张,并可以拖动条来切换 来观察随着步数的提升的变换趋势 ;如果标题变化则另起一框来显示,如:
image_path = r"F:\Data and code\data\蚂蚁蜜蜂数据\hymenoptera_data\hymenoptera_data\train\ants\0013035.jpg"
img_PIL = Image.open(image_path) # 这样读取出来的数据类型为PIL.JpegImage.......,总之不符合要求,需要转换
img_array = np.array(img_PIL) # 得到writer.add_image()函数所需要的数据类型
writer.add_image("test", img_array, 1, dataformats = 'HWC') # High高度,Weight宽度,channel通道数;默认通道数在前,
img_PIL = Image.open(r"F:\Data and code\data\蚂蚁蜜蜂数据\hymenoptera_data\hymenoptera_data\train\ants\5650366_e22b7e1065.jpg") # 这样读取出来的数据类型为PIL.JpegImage.......,总之不符合要求,需要转换
img_array = np.array(img_PIL)
writer.add_image("test", img_array, 2, dataformats = 'HWC') # 注意这里step由1变为了2
img_PIL = Image.open(r"F:\Data and code\data\蚂蚁蜜蜂数据\hymenoptera_data\hymenoptera_data\train\ants\5650366_e22b7e1065.jpg") # 这样读取出来的数据类型为PIL.JpegImage.......,总之不符合要求,需要转换
img_array = np.array(img_PIL)
writer.add_image("train", img_array, 1, dataformats = 'HWC') # 这里改变标题为train
2.1.3 writer.close
把缓存中保存的数据写到目标events
文件中,一旦训练中断没有close
,则你的保存目录中不会有相应的数据。