torch中的数据打包器
torch的导入
通过import
导入函数
import torch
torch的gpu版本
检查显卡是否可用
torch.cuda.is_available()
返回值若为True
则显卡可以使用
将数据或者模型等转移设备,可以用.to(device)
命令
import torch
# 将数据转移到第一张显卡上
data = torch.tensor([1, 2, 3])
data = data.to("cuda:0")
# 或者使用以下方法
data = data.cuda() # 等价于data.to("cuda:0")
import torch.nn as nn
# 将模型转移到第一张显卡上
model = nn.Linear(in_features=25, out_features=5)
model.to("cuda:0")
数据打包器
在torch包中有两个较为重要的数据包处理函数TensorDatatset
和DataLoader
,可以通过以下方式导入
from torch.utils.data import TensorDataset, DataLoader
TensorDataset
的用法
import torch
from torch.utils.data import TensorDataset
# 假设有以下的特征与标签张量
features = torch.tensor([[1, 2], [3, 4], [5, 6], [7, 8]])
labels = torch.tensor([0, 1, 0, 1])
# 创建TensorDataset对象
dataset = TensorDataset(features, labels)
- TensorDataset访问数据
TensorDataset对象可以支持索引与切片操作
# 访问第一个样本
first_sample = dataset[0]
# 返回值为一个元组(tensor([1, 2]), tensor(0))
# 访问前两个样本
first_two_samples = dataset[:2]
# 这会返回一个元组(tensor([[1, 2], [3, 4]]), tensor([0, 1]))
- DataLoader的用法
在将数据打包为TensorDataset对象后可以使用DataLoader
进行打包
from torch.utils.data import DataLoader
# 创建DataLoader对象
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)
在这个例子中,DataLoader
有三个参数,第一个参数就是我们生成的TensorDataset
的对象;第二个参数是batch_size
其作用是将样本分批次打包,一批次的数量为2;第三个参数shuffle
的意思是是否打乱样本的顺序,在训练集中一般将此参数设置为True
,在验证集和测试集中此参数设置为False
-
DataLoader的迭代与访问
我们可以通过
for
循环来访问DataLoader中的数据
for data, labels in dataloader:
pass
在迭代dataloader
时,每次迭代都会返回一个批次的数据和标签,方便模型训练和验证
如果需要每个批次的索引我们还可以用enumerate
来得到每个批次的索引
for index, (data, labels) in enumerate(dataloader):
pass
enumerate
的返回值是一个元组(索引号, 对应的可迭代序列数据)
因此index
对应批次的索引号,(data, labels)
对应该批次的数据和标签
- DataLoader的长度
我们可以通过len()
函数去测量dataloader
中有多少批次
len(dataloader)
# 返回值为一个数字,在此例中样本数为4,批次大小为2,因此返回值为2