在Python中实现15%的CIFAR10标签完全打乱的最有效方法是什么?

问题描述 投票:0回答:1

我正在使用深度神经网络进行实验,我需要通过向标签添加 15% 的标签噪声来训练模型来检查模型的稳健性。

我想实现一些随机选择的索引的完全混乱,并且我不希望类的数量超过trainloader中默认的数量(CIFAR-10数据集由10个中的60000个32x32彩色图像组成)类,每类 6000 张图像。有 50000 张训练图像和 10000 张测试图像)。

问题是我的代码效率不高(它已经运行了大约一个小时,试图实现对所选索引的完全混乱),而其他解决方案仍然会再次带回相同索引中的一些标签。

CIFAR10 标签从 0 到 9,我不希望任何标签仍然回到相同的索引。

我已经用 numpy 和 PyTorch 尝试了一些东西,特别是随机和排列,但它们都不能确保标签完全混乱。

import random
random.seed(data_seed)
def D(labels):
 deranged_list =labels[:]
 while any(x==y for x,y in zip(deranged_list,labels)):
   random.shuffle(deranged_list)
 return deranged_list
python numpy deep-learning pytorch
1个回答
0
投票

我终于找到了一种通过下面的代码有效实现它的方法。这不是最聪明的想法或最优雅的方式,但对我有用:

deranged = []
increment = 100
start = 0
random.seed(data_seed)
for i in range(75): # 75 because the for 15% percent labels noise, I end up with 7500 noisy labels
    if i == 0:
        deranged.extend(D(check_labels[:increment]))
        start += 100
        print(start)
    else:
        deranged.extend(D(check_labels[start:increment*(i+1)]))
        start += 100
        print(start)
© www.soinside.com 2019 - 2024. All rights reserved.