- 说明
- 环境配置
- 安装Anaconda
- 下载资源包
- 常用指令
- pycharm 环境配置
- 两大法宝函数
- Pytorch加载数据
- 数据读取相关
- 1.读取图片数据
- 2.路径存储
- 3.Dataset类实例演示
- 初识Tensorboard
- 1.简单示例
- 2.写入图像
本文章部分学习内容来源-b站课程
PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】
首先去官网下载Anaconda
官网
历史版本
接下来就是漫长的安装过程
安装完成后需要检查是否安装成功,在安装好的程序中点击Anaconda Prompt
有base证明安装成功
在conda相应环境下(例如自己定义某环境)安装相应资源包有以下两种方法(推荐pip)
1.conda命令安装
#在线安装opencv包 conda install opencv-python #离线安装指定包,需定位到相应文件夹下 conda install --offline ./cudatoolkit-11.3.1-h59b6b97_2.tar.bz2
2.pip命令安装
#在线安装opencv包 pip install opencv-python #在线安装opencv包(加设防超时限制) pip --default-timeout=100 install opencv-python #在线安装opencv包(加设防超时限制并指定镜像源下载,此处是豆瓣,国内还有清华源等) pip --default-timeout=100 install opencv-python -i https://pypi.douban.com/simple常用指令
conda activate pytorch #启动conda中定义的pytorch环境 import pytorch #检查pytorch能否被正常调用 jupyter notebook #在当前环境下启动jupyter notebook torch.cuda.is_available() #检查当前gpu调用是否正常 tensorboard --logdir=logs --port=6007 #打开tensorboard页并指定相应端口pycharm 环境配置
conda环境配置(pytorch环境下的python.exe,anaconda文件下的conda.exe)
dir()函数,能让我们知道工具箱以及工具箱中的分隔区有什么东西(打开、看见)
help()函数,能让我们知道每个工具是如何使用的,工具的使用方法(说明书)
数据:为一大堆杂乱无序待处理的文件
Dataset:提供一种方式去获取数据及其label(类似于从杂乱数据中获取每项数据的信息,为其编号并得到其标签信息)
from torch.utils.data import Dataset #导入Dataset包
Dataset包中主要重写getitem、add两个类,可选择性重写len类
Dataloader:为后面的网络提供不同的数据形式(类似于数据的打包)
数据读取相关 1.读取图片数据此处图片读取用到的是PIL中Image类的方法
from PIL import Image img_path = "" #此处为待读取的图片路径,绝对路径或相对路径均可 # 绝对路径示例 E:\PycharmProjects\learn_pytorch\images\pytorch.png # 相对路径示例 images/pytorch.png img = Image.open(img_path) #PIL.Image类型的类实体 img.show() #显示图片 img.size #显示图片尺寸(长宽多少像素)2.路径存储
此处用到join方法将路径拼接在一起,拼接后的path应为‘dataset/trainants’
import os root_dir = "hymenoptera_data/train" #此处采用相对路径 label_dir = "ants" path = os.path.join(root_dir, label_dir) #拼接路径
定义list类型的变量img_path,该变量存储相对应路径下所有文件名
img_path = os.listdir(path)
以下显示了变量的类型和存储信息
可以看到img_path以列表的形式存储了相对应路径下所有文件名
from torch.utils.data import Dataset
from PIL import Image
import os
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(root_dir, label_dir)
self.img_path = os.listdir(self.path)
def __getitem__(self, idx):
img_name = self.img_path[idx]
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
def __len__(self):
return len(self.img_path)
root_dir = "hymenoptera_data/train"
ants_label_dir = "ants"
bees_label_dir = "bees"
ants_dataset = MyData(root_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_label_dir)
train_dataset = ants_dataset + bees_dataset
初识Tensorboard
Tensorboard一般用于训练模型中图像的展示,通过图像的展示能得知训练过程是否像预想中那样变化,同时其还可以展示相应训练步数所对应的结果
1.简单示例from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
for i in range(100):
writer.addd_scalar("y=2x", 2*i, i)
writer.close()
- writer = SummaryWriter(“logs”)会在项目根目录下创建一个新的文件夹logs,里面会存放相应tensorboard事件文件
- writer.close()为关闭操作,必不可少
打开事件文件需要在aconda相应环境的控制台下输入以下指令,其中logdir为事件文件所在文件夹名,如果不指定端口默认为6006
tensorboard --logdir=logs tensorboard --logdir=logs --port=6007 #指定端口
tensorboard页面会展示相应图表
需要说明的是,每次向writer内写入新的事件时,其实也进入了上次事件中(即原事件依然会存放在事件文件夹中),一般来说有两种解决方案
- 重新写一个子文件,也就是说创建新的SummaryWriter(“新文件夹”)
- 删除原有事件文件
写入图像需要用到一个非常关键的函数,即add_image,该函数定义如下
def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')
- tag 对应图像的一个title
- img_tensor 规定图像传入的数据类型,通常为torch.tensor、numpy.array、string
- global_step 为训练的一个步骤
- dataformats 为数据格式,如果不是默认的CHW形式需要额外说明
下面为一个传入numpy类型图像的示例
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter("logs")
image_path = "dataset/train/bees_image/16838648_415acd9e3f.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)
writer.add_image("test", img_array, 1, dataformats='HWC')
# y = 2x
for i in range(100):
writer.add_scalar("y=2x", 2*i, i)
writer.close()
tensorboard页面会展示相应图片
如果想写入新的图像可以把global_step改为2,以此类推



