0%
boxmoe_header_banner_img

加载中

Pytorch基本函数使用(上)


avatar
mizuki 2026年9月28日 2026年9月28日 7

引言

机器学习理论的学习已经落下帷幕了,接下来将会学习实操方面,说到机器学习的实操肯定就离不开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)

查看评论列表

暂无评论


发表评论

表情 颜文字

插入代码
后退
前进
刷新
复制
粘贴
全选
删除
返回首页
0%
目录
顶部
底部
📖 文章导读