■人工智能编程:如何喂入样本数据到神经网络中训练?( 三 )
然后我们就可以使用这个dataLoader进行遍历操作了:
for batch_datas,batch_labels in dataloader:
# print(batch_datas.size(),batch_labels.size())
这是处理异常数据的一种方式 , 我们还可以使用下面这种方式来处理异常的数据
当出现异常数据的时候 , 我们随机挑选一张图片替代这个有问题的样本数据
创建一个新的数据类 , 然后数据样本是异常样本的时候 , 就随机选一张图片作为这个异常样本的替代
本文插图
本文插图
要注意的一点是
高负载的操作放在`__getitem__`中 , 如加载图片等 。
#dataset中应尽量只包含只读对象 , 避免修改任何可变对象 , 这样多线程操作就不会出现问题 。
随机取样的问题 , 当我们使用dataLoader , 默认的是采用`SequentialSampler` , 它会按顺序一个一个进行采样 。 有一个参数是shuffle=True的时候 , 它就相当于使用随机采样器RandomSampler实现打乱数据 。 还有一个其它的参数是weightedRandomSampler , 它可以根据每个样本的权重选取数据 , 在样本比例不均衡的问题中 , 我们可以使用它来完成重采样 。
#要想使用它需要提供两个参数 , 第一个参数是每个样本的权重weights , 第二个参数共选取的样本的总数num_samples,还有一个可选参数replacement(默认为true , 是否可以重复选取某一个样本)即允许在一个epoch中重复采样某一个数据 。 如果设为False , 则当某一类的样本被全部选取完 , 但其样本数目仍未达到num_samples时 , sampler将不会再从该类中选择数据 , 此时可能导致`weights`参数失效 。
#下面我们设置一个权重列表 , 狗的图片被取出的概率是猫的概率的两倍 , 两类图片被取出的概率与weights的绝对大小无关 , 只和比值有关 , 注意权重和样本之间是一一对应的
weights=[2 if label == 1 else 1 for data , label in dataset]
有个权重列表了 , 下面我们创建一个Sampler对象 , 将我们构建的权重列表传递过去
sampler=WeightedRandomSampler(weights,num_samples=9,replacement=True)
然后使用dataloader
dataloader=DataLoader(dataset,batch_size=3,sampler=sampler)
#for datas,labels in dataloader:
# print(labels.tolist())
【■人工智能编程:如何喂入样本数据到神经网络中训练?】#也就是说如果dataloader指定了sampler , 那么shuffle将不在生效 , 并且sampler.num_samples会覆盖dataset的实际大小 , 即一个epoch返回的图片总数取决于`sampler.num_samples` , 如果实际dataset不够用的话 , 我们可以设置replacement=True , 也就是重复的来取样本 。
推荐阅读
- 人民网@【战“疫”说理】疫情防控中如何有效实现经济复苏?
- 2020改变就在眼前,量化派助力多行业人工智能化
- 『车家号』高低功率如何选?后期改装就能“低变高”了吗?,同一款发动机
- 手机、眼镜如何消毒?清洁要从细节做起
- 『音频』iOS如何导入百度云的音频(易剪和易剪多轨版)
- 十大突破性技术-NMN,叫你如何选择最好的NMN
- 妙家影视■如何计算低压开关柜铜排用量?这是我见过最漂亮的文章!
- 「史今中外s」潜伏大陆40年没被发现,结局如何?,女特务为隐藏身份嫁给农民
- 【妙家影视】如何计算低压开关柜铜排用量?这是我见过最漂亮的文章!
- 「心聆寒岁」一夜带货1.6亿!如何看待直播热潮?,商场失意直播却火了
