Pytorch中dataloader之enumerate与iter,tqdm

dataloader本质上是一个可迭代对象,使用iter()访问,不能使用next()访问;

使用iter(dataloader)返回的是一个迭代器,然后可以使用next访问;

也可以使用for inputs,labels in enumerate(dataloader)形式访问,但是enumerate和iter的区别是什么呢?暂时不明白。

 

补充:

如下代码形式调用enumerate(dataloader['train'])每次都会读出一个batchsize的数据,可根据以下代码做一个测试。下面代码的前提是,数据集中总共包含245张图像,dataloader['train']设置时drop_last=True,其中batch_size=32,经过以下代码后输出的count为224(正好等于32*7),而多出来的245-224=21张图像不够一个batch因此被drop掉了。换句话说,enumerate(dataloader['train'])会把dataloader['train']中的数据一个batch一个batch地取出来用于训练。也就是说,使用enumerate进行dataloader中的数据读取用于神经网络的训练是第一种数据读取方法,其基本形式即为for index, item in enumerate(dataloader['train']),其中item中[0]为数据,[1]为label.

count=0
for index, item in enumerate(dataloader['train']):
    count+=len(item[1].numpy)
print(count)

第二种读取dataloader中数据的方法是使用默认的iter函数,其基本样式可参照以下代码:

for epoch in range(opt.begin_epoch,opt.end_epoch):
    iter=myDataLoader['train'].__iter__() #返回值iter是一个基本的迭代器
    batchNum=len(myDataLoader['train']) #返回batch的数量,如上应该等于7

    myNet.train() #使得我定义的网络进入训练模式
    
    for i in range(0,batchNum):
        batchData=iter.__next__() #读取一个batch的数据,batchsize=32时实际对应32张图像
        img=batchData[0].to(opt.device) #opt.device=cuda,即转移到GPU运行
        ...

还有一个tqdm后续补充!!!

tqdm是一个可以显示进度条的模块

from tqdm import tqdm
for item in tqdm(range(100)):
    # do something

enumerate()函数是python的内置函数,可以同时遍历lt中元素及其索引,i是索引,item是lt中的元素,如图:

from tqdm import tqdm
lt=['a','b','c']
for i, item in enumerate(lt):
    print(i,item)

#输出结果如下:
0 a
1 b
2 c

tqdm和enumerate()结合

from tqdm import tqdm
lt=['a','b','c']
for i,item in enumerate(tqdm(lt))
    print(i,item)

以上关于tqdm部分内容转载自:https://blog.csdn.net/m0_37586991/article/details/89435193

  • 29
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PyTorch,迭代可以通过使用DataLoaderenumerate函数来进行。在给定一个数据集后,可以使用DataLoader加载数据集并设置批处理大小。然后,使用enumerate函数迭代DataLoader对象以获取每个批次的数据。在每个迭代步骤,可以使用enumerate函数返回的索引和批次数据进行处理。这样可以方便地进行数据迭代和批处理操作。 此外,您还可以自定义一个类,并使用__iter__和__next__方法来实现自定义的迭代器。这个类可以定义您希望返回的数据的格式和顺序。在每次调用__next__方法时,可以返回一部分数据,并在下一个迭代步骤更新迭代器的状态。通过使用for循环来迭代自定义的迭代器对象,可以方便地获取按您定义的规则划分的数据。 如果需要对数据进行随机化处理,可以在创建DataLoader对象时设置shuffle=True参数。这将导致每个迭代步骤的数据顺序被随机化。这对于模型训练的数据随机化非常有用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [由浅入深:终于搞懂了 Python 和 PyTorch迭代器(iterator)、Dataset 和 DataLoader](https://blog.csdn.net/qq_43799400/article/details/122594950)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值