- @[toc]
- 环境准备
- Dataset的使用
- 图片读取
- 单张
- 多张
- 完整代码
- 控制台运行查看结果
- TensorBoard的使用
- 显示图像
- 安装 anaconda(无脑安装即可)
- 下载 PyTorch(网上找个好教程,注意版本匹配)
- Jupyter notebook/Pycharm调用Anaconda虚拟环境
为方便深度学习项目构建数据集,Pytorch 为我们提供了 Dataset 类。
Pytorch 的 dataset 类是一个抽象类,继承 dataset ,需要实现它的__getitem__()方法和__len__()方法。
图片读取数据集目录如下:
单张from PIL import Image # 使用 Image 处理图片 img_path = r"dataset/train/ants_image/1.jpg" # 为了方便项目迁移,使用相对路径;前面加 r ,就不需要考虑转译了(Windows和linux文件路径存在斜杠上的差异) img = Image.open(img_path)
在 Python Console 里可以清晰地查看变量,特别方便。
多张import os root_dir = r"dataset/train" label_dir = r"ants_image" path = os.path.join(root_dir,label_dir) # 读取整个目录 img_path = os.listdir(path) # 在控制台可以输出 # img_path[0] # Out[14]: '1.jpg' img_name = img_path[0] img_item_path = os.path.join(path,img_name) # 拼接得到一张图片的相对路径 img = Image.open(img_item_path)完整代码
from torch.utils.data import Dataset
from PIL import Image
import os
# 继承 Dataset
class MyData(Dataset):
# 做初始化,准备图片列表
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)
# 从list中获取
def __getitem__(self, index):
img_name = self.img_path[index]
img_item_path = os.path.join(self.path,img_name)
img = Image.open(img_item_path)
label = self.label_dir
return img,label
def __len__(self):
return len(self.img_path)
root_dir = "dataset/train"
label_dir = "ants_image"
ants_dataset = MyData(root_dir,label_dir)
控制台运行查看结果
TensorBoard的使用
Tensorboard 原本是 TensorFlow 的可视化工具,可以用于记录训练数据、评估数据、网络结构、图像等,并且可以在 web 上展示,对于观察神经网络的过程非常有帮助。PyTorch 也推出了自己的可视化工具,一个是 tensorboardX 包,一个是 torch.utils.tensorboard ,二者的使用相差不大。
TensorBoard 通过运行一个本地服务器,来监听 6006 端口。在浏览器发出请求时,分析训练时记录的数据,绘制训练过程中的图像。
测试案例如下:
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter('logs')
# y = 2x
for i in range(100):
writer.add_scalar("y=2x",2*i,i)
writer.close()
- 右击 run 执行代码
- 输入 tensorboard --logdir=logs 进行查看( logs 为自己取的文件夹名)
tensorboard --logdir=logs --port=6007 可以换端口(默认 6006 端口,但当多人在同一服务器训练时就会产生冲突)
如果不更改标题,只更改坐标轴再次运行,则会出现拟合。
显示图像img_path = "dataset/train/ants_image/1.jpg"
img = Image.open(img_path)
img_array = np.array(img) # 必须转化图片格式
# print(img_array.shape)
writer.add_image("test",img_array,1,dataformats='HWC')
因为有默认的 shape 格式,因此得进行调整,加上 dataformats='HWC'



