引言
机器学习理论的学习已经落下帷幕了,接下来将会学习实操方面,说到机器学习的实操肯定就离不开pytorch的,这篇文章将讲解几个pytorch中高频使用的函数
一. 读取数据
- 1. Dataset
当我们在pytorch中想要自定义一个类用于存储数据时,我们往往可以导入Dataset这个pytorch提供的类,然后把这个类继承给我们自己的类,主要是为了可以实现下列两个方法:
a. __len__(self)
用于返回数据的个数
b. __getitem__(self,idex)
定义“如何根据索引返回第 index 个样本”
但是这两个函数也是要自己进行书写的,这里给出一个例子:
from torch.utils.data import Dataset
class MyDataset(Dataset):
def __init__(self):
self.data = [10, 20, 30, 40]
def __len__(self):
return len(self.data)
def __getitem__(self, index):
return self.data[index]
因此,导入Dataset并不是直接给我们函数使用,而是给你提供一个标准的数据集结构
- 2. 读取图片
我们通常要通过导入Image这个函数从路径中读取图片,首先要输入下列导入代码:
form PIL import Image
如果没有安装open cv,可以在终端输入以下代码:
pip install opencv-python
导入后再将图片的绝对路径或者相对路径赋值给一个变量,再利用 Image.open() 函数读取图片,将图片文件路径传给Image.open() ,得到一个可在 Python 中操作的 PIL 图像对象,最后可以通过show()函数将图片展出,示例如下:
from PIL import Image
#找到路径
img_path = "D:\\pytorch练习\\Dataset练习\\图片\\4b87d95598a89b0eab64d687911b1ce4_720.jpg"
#使对象成为能被python识别为图像
img = Image.open(img_path)
img.show()
结果如图:

os:mzk真好看
- 3. 读取地址
对于一个文件夹内所有文件的地址,我们可以通过导入 os ,再利用自带的 os.listdir() 实现读取,将地址转化为一个列表,最后再通过 os 自带的 os.path,join() 函数实现文件名和子目录名和相对地址的合并,这里给出例子:
from PIL import Image
import os
path ="图片"
#使这个路径成为一个列表
img_path = os.listdir(path)
#利用索引找图片
img_path = os.path.join(path, img_path[2])
img2 = Image.open(img_path)
img2.show()
为什么要合并呢,因为 listdir 返回目录下的文件名和子目录名,所以要将它与文件名的绝对路径合并,这样才能成功访问,结果如下:

二. Tensorboard的使用
- 1. 介绍
Tensorboard主要用于机器学习中查看数据的关系,例如函数图,loss随时函数图以及各种图片,以便于我们更直观的观察数据
- 2. 导入
通过以下代码可以导入Tensorboard:
from torch.utils.tensorboard import SummaryWriter
如果提示没有安装Tensorboard,可以在终端输入以下代码安装:
pip install tensorboard
- 3. 如何打开Tensorboard
在终端中输入以下代码,空的地方输入你生成图片的路径,点击生成的链接,即可打开
tensorboard --logdir="生成图片路径"
- 4. 存入一个类
我们常用的就是SummaryWriter这个类,为了使用这个类,我们需要先定义一个这个类类型的变量,然后再利用这个变量调用这个类的方法
writer = SummaryWriter("logs")
这里的logs表达之后通过writer生成的图都将生成在这个logs目录中
接下来将讲解两个常用的方法
- 5. add_scalar()
这个方法主要是用于生成函数图,一般需要填写前三个参数,第一个参数为函数图名(title),第二个为y值,第三个为x值
接下来给出一个例子:
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
for i in range(100):
writer.add_scalar("test", 2 * i, i)
writer.close()
这里是生成结果:

- 6. add_image()
这个方法主要是用来打开已知的图片,将其展示在网页上,但是也分了几步才能达成目标
a. 利用 opencv 读取图片,将路径转化为可识别的 PIL 图像对象
b. 将对象转化为numpy对象或者tensor,因为add_image()只能读取numpy对象和tensor对象
c. 观察对象的 shape ,如果通道数在最后,要加上 dataformats = ‘HWC’
d. 格式: wirter.add_iamge(“title”, 对象数据, step, dataformats = ‘HWC’)
这里的step表示在网页的这个title名中,排序第几,从0开始计算,与数组的索引计算相同
这里给出例子,先按照转化为numpy类型,在下面会学习如何转化为tensor类型
img_path = "D:\\pytorch练习\\Tensorboard练习\\图片\\4b87d95598a89b0eab64d687911b1ce4_720.jpg"
img = Image.open(img_path)
img_array = np.array(img)
writer.add_image('mzk', img_array, dataformats='HWC')
writer.close()
结果如下:

记得 wirter 结束后一定要加上 writer.close()
总结
本来准备还要讲解transforms,但是考虑到文章篇幅,就放到下一篇讲吧

评论(0)
暂无评论