PyTorch——Dataloader使用

一、Dataloader是啥

前面我在写PyTorch的第一篇文章里讲过Dataset是啥,Dataset就是将数据集分类,并且分析出这些数据集它的位置哪、大小多少、这个数据集一共有多少数据......等等信息

那么把Dataset比作一副扑克牌,那么如果你就让这副牌放在桌子那不去取牌,那你怎么打牌?Dataloader就是做【取牌】这个操作,就是去【读取数据】

二、使用DataLoader

首先先看一下官方文档对于DataLoader是怎么使用的:torch.utils.data — PyTorch 2.4 documentation

其中框住的解释的是常用的参数变量的作用解释

用一些例子结合tensorboard,直观地生动地解释一下

batch_size参数】:一次读取几个数据

drop_last参数】:最后一次读取,剩余数据不足【batch_size】时,要不要舍去

shuffle参数】:当多轮读取的时候,图片顺序是否一样,False是顺序一样

代码编写:导包(torchvision为了dataset,DataLoader则来自torch.utils.data)

然后先用dataset把数据集获取到,这里我用的是下载好的pytorch内置数据集CIFAR10,你们也可以用自定义数据集,注意语法区别就行

然后用DataLoader,设置好参数配置

import torchvision
from torch.utils.data import DataLoader

# 用dataset获取pytorch的内置数据集(我已经下载好,而且选用测试数据集)
test_dataset = torchvision.datasets.CIFAR10("./dataset2", train=False, transform=torchvision.transforms.ToTensor())

# 然后用DataLoader读取,并设置好参数(上面例子里没讲到的参数,你就当默认这么写就好了,我也不知道)
test_loader = DataLoader(dataset=test_dataset, batch_size=64, shuffle=True, num_workers=0, drop_last=True)

三、结合transforms、tensorboard

语法都是之前学过的,直接创建SummaryWriter( )对象,指定图像文件生成在哪个文件夹;

然后遍历整个DataLoader返回的数据,返回的是一个列表;

每次循环,提取出每个元素里的【img】跟【target】,【img】就是tensorboard的【.add_images()】所需要的图像,另外step跟着遍历递增就行

import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

# 用dataset获取pytorch的内置数据集(我已经下载好,而且选用测试数据集)
test_dataset = torchvision.datasets.CIFAR10("./dataset2", train=False, transform=torchvision.transforms.ToTensor())

# 然后用DataLoader读取,并设置好参数(上面例子里没讲到的参数,你就当默认这么写就好了,我也不知道)
test_loader = DataLoader(dataset=test_dataset, batch_size=64, shuffle=True, num_workers=0, drop_last=True)

step = 0
write = SummaryWriter("DataLoader_logs")
for item in test_loader:
    img, target = item
    # print(img.shape)
    # print(target)

    # 利用tensorboard生成图像
    # 一定一定要注意!!是.add_images不是.add_image!不能漏了s
    write.add_images("dataloader", img, step)
    step += 1

write.close()

下一篇讲神经网络

PyTorch中,要冻结某层参数,即保持其权重在训练过程中不发生更新。这种操作通常在迁移学习或固定特定的层的场景下使用,以便保留已经学到的知识。 要冻结某层参数,可以通过以下步骤实现: 1. 首先,加载模型并查看模型的结构。通过打印模型就可以看到每一层的名称以及对应的索引。 2. 在训练之前,确定需要冻结的层。可以通过模型的参数名称或索引来定位到具体的层。 3. 使用`requires_grad_()`函数来冻结参数,将需要冻结的层的`requires_grad`属性设置为False。这样,在反向传播过程中,这些参数的梯度就不会进行更新了。 4. 在训练过程中,只对其他未冻结的层进行梯度更新。 下面是一个简单的示例代码,演示如何冻结某层参数: ```python import torch import torch.nn as nn # 加载模型并创建优化器 model = torchvision.models.resnet18(pretrained=True) optimizer = torch.optim.Adam(model.parameters(), lr=0.001) # 查看模型结构 print(model) # 冻结某层参数 # 可以通过模型的named_parameters()函数获取每一层的名称和参数 # 这里以冻结ResNet的第4个卷积层参数为例 for name, param in model.named_parameters(): if 'layer4' in name: # 可根据具体需求来决定冻结哪些层 param.requires_grad_(False) # 训练过程 for inputs, labels in dataloader: outputs = model(inputs) loss = loss_func(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step() ``` 通过以上步骤,我们可以实现冻结某层参数的操作。这样,在训练过程中,被冻结的层的参数将不会更新,从而保持其固定的权重。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值