torch.utils.data.dataset,torch.utils.data.TensorDataset
这篇文章主要介绍了torch.utils.data.DataLoader与迭代器转换操作,文章内容接受非常详细,对正在学习或工作的你有一定的帮助,需要的朋友可以参考一下
在做实验时,我们常常会使用用开源的数据集进行测试。而框架中内置了许多数据集,这些数据集我们常常使用数据加载器类进行加载。
如下面这个我们使用数据加载器类加载火炬视觉中的时尚人士数据集。
从torch.utils.data导入数据加载器
从参考导入数据集
从火炬视觉。将导入转换为传感器
将matplotlib.pyplot作为血小板计数导入
培训_数据=数据集。时尚达人(
root=data ,
train=True,
下载=真,
transform=ToTensor()
)
测试数据=数据集。时尚达人(
root=data ,
train=False,
下载=真,
transform=ToTensor()
)
我们接下来定义Dataloader对象用于加载这两个数据集:
train _ data loader=data loader(training _ data,batch_size=64,shuffle=True)
测试数据加载器=数据加载器(测试数据,批量大小=64,洗牌=真)
那么这个train_dataloader究竟是什么类型呢?
print(type(train _ data loader))# class torch。utils。数据。数据加载器。数据加载器
我们可以将先其转换为迭代器类型。
print(type(ITER(train _ data loader)))# class torch。utils。数据。数据加载器。_ SingleProcessDataLoaderIter
然后再使用下一步(iter(train_dataloader))从迭代器里取数据,如下所示:
train_features,train _ labels=next(ITER(训练数据加载器))
打印(f 特征批次形状: { train _ features。size()} )
打印(f 标签批次形状: { train _ labels。size()} )
img=train_features[0].挤压()
标签=train_labels[0]
plt.imshow(img,cmap=gray )
plt.show()
打印(fLabel: {label} )
可以看到我们成功获取了数据集中第一张图片的信息,控制台打印:
特色批量造型:电筒。大小([64,1,28,28])
标签批量形状:火炬。大小([64])
标签: 2
图片可视化显示如下:
不过有读者可能就会产生疑问,很多时候我们并没有将数据加载器类型强制转换成迭代器类型呀,大多数时候我们会写如下代码:
对于train_features,train_dataloader:中的火车_标签
打印(train _ feature . shape)#火炬。大小([64,1,28,28])
print(train_features[0]).形状)#火炬。大小([1,28,28])
print(train_features[0]).挤压()。形状)#火炬。大小([28,28])
img=train_features[0].挤压()
标签=train_labels[0]
plt.imshow(img,cmap=gray )
plt.show()
打印(fLabel: {label} )
可以看到,该代码也能够正常迭代训练数据,前三个样本的控制台打印输出为:
火炬。大小([64,1,28,28])
火炬。大小([1,28,28])
火炬。大小([28,28])
标签: 7
火炬。大小([64,1,28,28])
火炬。大小([1,28,28])
火炬。大小([28,28])
标签: 4
火炬。大小([64,1,28,28])
火炬。大小([1,28,28])
火炬。大小([28,28])
标签: 1
那么为什么我们这里没有显式将数据加载器转换为迭代器类型呢,其实是计算机编程语言语言为循环的一种机制,一旦我们用为.在.句式来迭代一个对象,那么计算机编程语言解释器就会偷偷地自动帮我们创建好迭代器,也就是说
对于train_features,train_dataloader:中的火车_标签
实际上等同于
对于train_features,iter(train_dataloader):中的火车_标签
更进一步,这实际上等同于
训练迭代器=ITER(训练数据加载器)
尝试:
而True:
train_features,train _ label=next(train _ iterator)
停止迭代:除外
及格
推而广之,我们在用Python迭代直接迭代列表时:
对于[1,2,3,4]:中的x
其实Python解释器已经为我们隐式转换为迭代器了:
list_iterator=iter([1,2,3,4])
尝试:
而True:
x=next(list_iterator)
停止迭代:除外
及格
到此这篇关于torch.utils.data.DataLoader与迭代器转换操作的文章就介绍到这了,更多相关torch.utils.data.DataLoader与迭代器转换内容请搜索盛行信息技术软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行信息技术软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。