TensorDataset

TensorDataset 可以用来对 tensor 进行打包,就好像 python 中的 zip 功能。该类通过每一个 tensor 的第一个维度进行索引。因此,该类中的 tensor 第一维度必须相等。


from torch.utils.data import TensorDataset
import torch
from torch.utils.data import DataLoader

a = torch.tensor([[11, 22, 33], [44, 55, 66], [77, 88, 99], [11, 22, 33], [44, 55, 66], [77, 88, 99], [11, 22, 33], [44, 55, 66], [77, 88, 99], [11, 22, 33], [44, 55, 66], [77, 88, 99]])
b = torch.tensor([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2])
train_ids = TensorDataset(a, b) 
# 切片输出
print(train_ids[0:2])
print('#' * 30)
# 循环取数据
for x_train, y_label in train_ids:
    print(x_train, y_label)
# DataLoader进行数据封装
print('#' * 30)
train_loader = DataLoader(dataset=train_ids, batch_size=4, shuffle=True)
for i, data in enumerate(train_loader, 1):  # 注意enumerate返回值有两个,一个是序号,一个是数据(包含训练数据和标签)
    x_data, label = data
    print(' batch:{0} x_data:{1}  label: {2}'.format(i, x_data, label))   # y data (torch tensor)

运行结果:

注意:TensorDataset 中的参数必须是 tensor 

pytorch中使用torch.utils.data.TensorDataset时报错TypeError: 'int' object is not callable,同时在代码中并没有与TensorDataset重名的函数的解决办法。

使用TensorDataset函数的代码为:

train_dataset = Data.TensorDataset(x_train,y_train)

执行之后发现报错:

TypeError: 'int' object is not callable。但是检查代码发现并没有与TensorDataset重名的函数。

经过研究TensorDataset函数的源码发现,这个函数传入的参数必须是tensor类型的,所以把x_train与y_train转换为tensor类型在执行这个函数就不报错了,更改后的代码为:

train_dataset = Data.TensorDataset(pt.tensor(x_train),pt.tensor(y_train))

 

  • 67
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
TensorDataset是PyTorch提供的一个数据集类,它可以轻松地将一个或多个Tensor的数据和标签打包到一起。可以将一个Tensor表示的数据集和一个Tensor表示的标签集打包成一个相应的TensorDataset实例,以便于后续处理。例如,可以使用TensorDataset类将训练数据用于模型的训练。 TensorDataset的常见使用场景是将训练数据打包成一个TensorDataset对象,然后使用DataLoader类将其传递给模型进行训练。DataLoader类可以帮助你迭代数据集并为神经网络提供一个批量的数据,这对于训练神经网络非常有用。 下面是一个使用TensorDataset类的例子: ```python import torch from torch.utils.data import TensorDataset, DataLoader # 创建数据集 x_train = torch.tensor([[1, 2], [3, 4], [5, 6], [7, 8]]) y_train = torch.tensor([0, 1, 1, 0]) dataset = TensorDataset(x_train, y_train) # 创建数据加载器 batch_size = 2 loader = DataLoader(dataset, batch_size=batch_size, shuffle=True) # 使用数据加载器进行模型训练 for x_batch, y_batch in loader: # x_batch和y_batch是打包在一起的批量数据和标签 print(x_batch.shape, y_batch.shape) ``` 在这个例子中,我们首先创建了一个包含4个样本的数据集,其中每个样本有两个特征。然后,我们使用这个数据集创建了一个数据加载器,并将其用于模型的训练。在训练过程中,数据加载器将每个批量的数据和标签作为一个元组提供给模型,这里我们只是简单地打印了每个批量的数据和标签的形状,以演示数据加载器的工作原理。 使用TensorDataset类可以方便地将数据和标签打包到一起,并使用DataLoader类迭代数据集进行模型训练,这对于处理大量数据集非常有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值