Dataset+DataLoader加载数据流程代码详解

引言

这篇文章是上一篇文章的一个补充,主要是从数据存储的角度出发去探索整个pytorch的数据加载方式,最终会追朔到数据文件的读写。本文以MNIST数据集举例,从源代码分析了解整个流程。

第一步定义数据集

train_data = torchvision.datasets.MNIST(
   root='./MINIST',  # 数据集的位置
   train=True,  # 如果为True则为训练集,如果为False则为测试集
   transform=torchvision.transforms.ToTensor(),  # 将图片转化成取值[0,1]的Tensor用于网络处理
   download=False
)

上面代码是初始化MNIST数据集的代码,MNIST是pytorch的torch.util.data.Dataset的实现。

class MNIST(VisionDataset):
class VisionDataset(data.Dataset):

可以看到它实现了Dataset中的中的__getitem__()接口,具体实现如下:

def __init__(
   self,
   root: str,
   train: bool = True,
   transform: Optional[Callable] = None,
   target_transform: Optional[Callable] = None,
   download: bool = False,
) -> None:
   super().__init__(root, transform=transform, target_transform=target_transform)
   self.train = train  # training set or test set
   if self._check_legacy_exist():
       self.data, self.targets = self._load_legacy_data()
       return
   if download:
       self.download()
   if not self._check_exists():
       raise RuntimeError("Dataset not found. You can use download=True to download it")
   self.data, self.targets = self._load_data()
def __getitem__(self, index: int) -> Tuple[Any, Any]:
   img, target = self.data[index], int(self.targets[index
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值