0%
boxmoe_header_banner_img

加载中

Pytorch基本函数使用(下)


avatar
mizuki 2026年10月10日 2026年10月10日 9

引言

这一篇文章继续讲解关于Pytroch的基本函数

一. Transforms

  • 1.1 导入

这里是导入transforms的代码

from torchvision import transforms
  • 1.2 结构

transforms相当于一个工具箱,对图片进行一系列的操作,然后得到想要的图片形式,如图

  • 1.3 如何使用

这里拿 transforms.ToTensor 举例,要先创建一个类对象,再利用这个类对象对图片(img)进行操作,代码如下

tensor_test = transforms.ToTensor()
tensor_img = tensor_test(img)
#这样就可以将img从PIL类型转化为Tensor类型
  • 1.4 常见的transforms函数

a. Totensor

作用是将类型转化为Tensor类型

创建对象时不需要参数,使用时参数为要转化类型的对象

使用方法如上

b. Normalize

作用是将图片标准化,创建对象时参数为标准化的平均值和标准差,是为了使模型更适合训练,而不是给人看的

参数第一个代表平均值,第二个代表标准差

使用例子如下:

#标准化练习
img_path1 = "D:\\pytorch练习\\Transforms练习\\图片\\4b87d95598a89b0eab64d687911b1ce4_720.jpg"
img1 = Image.open(img_path1)
img1 = tensor_test(img1)
normalizer = transforms.Normalize([0.485, 0.456, 0.406],[0.229, 0.224, 0.225])
writer.add_image("mzk1", normalizer(img1), 0)

这是这张图片标准化前后的区别(右为原图):

c. Resize

作用是改变图片尺寸,拉缩图片,在之后的Dataloader中很有用

参数是图片的大小,两个参数代表长宽,一个参数代表等比例缩放,使用例子如下

#resize练习
Resize_test = transforms.Resize((256, 256))
print(img1.shape)
img2 = Resize_test(img1)
print(img2.shape)
writer.add_image("mzk2", img2, 1)

对比图如下(右为原图):

d. RandomCrop

作用是随机裁剪

参数与Resize类似,代表随机裁剪的尺寸

这里给出例子:

#randomcrop练习
Randomcrop_test = transforms.RandomCrop((128,128))
for i in range(len(img_paths)):
    img_path = os.path.join(path, img_paths[i])
    img = Image.open(img_path)
    img = tensor_test(img)
    img = Randomcrop_test(img)
    writer.add_image("mzk3", img, i)

这里是对一个文件中的图片进行随机裁剪

e. Compose

作用是将各种transforms参数组合起来,一次性对图片使用,可以减少代码的冗杂度

参数就是各种transforms参数,用[]括起来

transform_set = torchvision.transforms.Compose([torchvision.transforms.Resize([256, 256]), torchvision.transforms.ToTensor()])

这里的作用就是先将图片Resize后再转化为Tensor类型

  • 1.5 总结使用方法

a. 先创建一个合适的对象

b. 将目标图片代入作为参数,得到结果

二. torchvision中数据集的使用

  • 2.1 如何下载数据集

a. 通过官方下载渠道下载数据集

这里给出一个例子,再结合例子讲解

test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())

第一个参数是下载到哪里,第二个参数表示下载的是训练集还是测试集,第三个参数表示对数据集进行transform的一系列操作

b. 直接读取本地数据集

dataset = torchvision.datasets.ImageFolder(root = "data/val", transform = transform_set)

这里将CIFAR10改为了ImageFolder,因为我这里下载的本地数据集是img类型的图片

而本地数据集不能通过编译器分辨训练集和测试集,因此不写

  • 2.2 如何使用

首先我们可以通过索引观看内容

print(dataset[0])

得到结果如图,前面的数组表示图片数据,后面的 0 表示图片标签

我们也可以通过循环将前十张图片写进tensorboard

for i in range(10):
    img, label = dataset[i]
    writer.add_image("test" , img, i)

利用 classes + [label] 可以看具体标签

img, label = dataset[0]
print(dataset.classes[label])

结果如下:

因为这里我的图片类型是ants,所以输出ants

三. Dataloader的使用

  • 3.1 作用

决定如何使用数据集

  • 3.2 参数

a. 第一个参数为自定义的数据集datatset

b. batch_size:决定每次使用数据集中的几个数据(前提是图片尺寸要相同)

c. shuffle:每次使用时是否要打乱数据顺序,默认为False

d. num_workers:加载时采用多进程还是单进程,默认为0

e. drop_last:最后余下的数据是否要舍去

这里给出一个例子:

transform_set = torchvision.transforms.Compose([torchvision.transforms.Resize([256, 256]), torchvision.transforms.ToTensor()])

test_dataloader = torch.utils.data.DataLoader(dataset = dataset, batch_size = 64, shuffle = True, drop_last = False, num_workers=0)

注意这里我将所有的图片进行了统一的Resize,否则无法使用DataLoader

  • 3.3 使用

a. 准备一个数据集(注意将数据对象的大小统一)

transform_set = torchvision.transforms.Compose([torchvision.transforms.Resize([256, 256]), torchvision.transforms.ToTensor()])

b. 导入并且创建一个DataLoader对象

test_dataloader = torch.utils.data.DataLoader(dataset = dataset, batch_size = 64, shuffle = True, drop_last = False, num_workers=0)

c. 读取数据

因为DataLoader返回的是一个数据包,所以我们接受到的也是一个数据包,进行接受时得到的就是imgs和labels

imgs和labels都是一个数据集,因此进行tensorboard写入时要使用add_images

for epoch in range(2):
    step = 0
    for data in test_dataloader:
        imgs, labels = data
        writer.add_images(f"epoch: {epoch}" , imgs, step)
        step += 1

得到的结果如下:

因为shuffle填的True,因此图片顺序会不同

总结

Pytorch的基本函数介绍就到这里结束了,下一章将讲解关于神经网络的知识

还有两个周就可以去确定研究方向了,加油加油

上一次更新已经跑远了✨ 计算中...
(‾◡◝) 本内容里的一些消息,可能已经跟不上时间啦~


评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字

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