本文结合小土堆的教学视频PyTorch深度学习快速入门教程进行学习
一、加载数据集
1. 加载数据集所需要的两个类 —— Dataset & DataLoader
Dataset:是用来对数据打包的抽象类,提供一种方式来获取数据及其label(进行数据分类和编号)。能够实现如何获取数据集中每一个数据及其label,并且告诉我们总共数据集中有多少个数据。
DataLoader:是用来处理模型输入数据的工具类,为网络提供不同的数据形式。
2. Dataset类的重写及加载数据集
具体代码实现如下
from torch.utils.data import Dataset
from PIL import Image
import os
class MyData(Dataset):
# 重写__init__函数
def __init__(self,root_dir,label_dir):
self.root_dir=root_dir # 数据集路径
self.label_dir=label_dir # 图片文件夹名
self.path=os.path.join(self.root_dir,self.label_dir) # 形成图片文件夹的完整路径
self.img_path=os.listdir(self.path) # 将传入路径下的所有项目名称加入列表中
# 重写__getitem__函数
def __getitem__(self, index):
img_name=self.img_path[index] # 取出列表中编号为index的图片项目名称
img_item_path=os.path.join(self.root_dir,self.label_dir,img_name) # 形成图片的完整路径
img=Image.open(img_item_path) # 打开图片
label=self.label_dir
return img,label # 返回图片和标签
# 重写__len__函数
def __len__(self):
return len(self.img_path) # 返回列表长度,即包含多少张图片
root_dir=r"D:\train" # 数据集路径
a_label_dir="images" # 图片文件夹名
a_dataset=MyData(root_dir,a_label_dir) # 加载数据集
二、TensorBoard的使用
1. 方法add_scalar的使用(绘制图表)
具体代码实现如下
from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter("logs") # 创建实例,并存储到传入的路径下
# 绘制图表,传入的第一个参数是标题,第二个参数是y轴,第三个参数是x轴
for i in range(100):
writer.add_scalar("y=2x",2*i,i)
writer.close() # 关闭文件
将程序运行后,在终端输入 tensorboard --logdir=logs --port=6007 ,更改端口号是为了避免端口和别人相同而导致堵塞。
当运行后,出现了 ModuleNotFoundError: No module named 'tensorboard' 的报错,说明我们没有安装tensorboard模块,因此需要在终端输入命令 pip install tensorboard 进行模块安装。
安装成功后再次运行,却出现了 TypeError: MessageToJson() got an unexpected keyword argument 'including_default_value_fields' 的报错,经查询发现,是目前安装的Tensorboard版本过高所导致的错误,降低版本即可,故需要在终端输入命令 pip install tensorboard==2.12.0 降低版本。再次运行即可成功,结果显示如下

2. 方法add_image的使用(绘制图像)
具体代码实现如下
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer=SummaryWriter("logs") # 创建实例,并存储到传入的路径下
image_path=r"D:\pytorch_train\train\images\20240104_183616609.jpg" # 传入图片路径
image_PIL=Image.open(image_path) # 打开文件
img_array=np.array(image_PIL) # 获取numpy型图片数据
#绘制图片,传入的第一个参数是标题,第二个参数是图片数据,第三个参数是步长
writer.add_image("test",img_array,1,dataformats="HWC")
# 使用numpy型图片数据需要加最后一个参数,修改图片格式
writer.close()
将程序运行后,在终端输入 tensorboard --logdir=logs --port=6007 ,结果显示如下

808



被折叠的 条评论
为什么被折叠?



