动手学深度学习——5. 数据清洗

2023-11-01

动手学深度学习——5. 数据清洗

记录一下学习深度学习的一些。本篇简述如何使用 cleanlab 清洗分类数据

所使用环境:

  • Ubuntu 16.04
  • 8700K
  • GeForce RTX 1080Ti
  • Python 3.8
  • Pytorch 1.7.1
  • cleanlab 0.1.1

数据准备

首先将上篇所说的猫狗大战的训练集,按猫狗分为0/1两个目录,父目录命名为 train,接着将两类图片分类,按名字检索一下就可以分开。

pic1

因为图片的大小不一,所以在进行交叉验证训练的时候,将图片缩放至统一尺寸 224 × 224 224 \times 224 224×224,方便训练。

train_dataset = datasets.ImageFolder(
	traindir,
	transforms.Compose([
        transforms.Resize((224, 224)),
		transforms.RandomHorizontalFlip(),
		transforms.ToTensor(),
		normalize,
	]),
)

val_dataset = datasets.ImageFolder(
	valdir,
	transforms.Compose([
        transforms.Resize((224, 224)),
		transforms.RandomHorizontalFlip(),
		transforms.ToTensor(),
		normalize,
	]),
)	

数据清洗

交叉验证获取预测概率矩阵 psx

python train_crossval.py -a efficientnet-b6 -o output -j 4 -b 20 --epochs 10 --lr 0.001 --pretrained --world-size 1 --rank 0 --dist-url tcp://localhost:8001 --multiprocessing-distributed --cvn 5 --cv 0 --num-classes 2 data

修改参数 cv,直至 k 折交叉验证均完成,相应的 out-of-sample 预测概率 P ^ k , i \hat{P}_{k,i} P^k,inpy 文件会生成至 output 参数所指定的目录。这里有一点不同的是,官方提供的实例是使用 val 目录下的数据集来调优的,而我用交叉验证的 holdout 部分,所以效果可能会有所下降。

合并所有的 npy 文件,生成完整的 psx

python train_crossval.py -a efficientnet-b6 --cvn 5 -o output --num-classes 11 --combine-folds data

获取错误的标签及对应的原始标签

python get_error_labels.py --psx output/train__model_efficientnet-b6__pyx.npy -db output/test.db -t test data/train

查看结果

Overall accuracy: 98.12%
Total: 101

可以看到通过 cleanlab,25,000 张训练图像中有 101 的错误标注,通过图来验证一下。

原始标签为猫的,cleanlab 预测为狗的:

nrows = math.ceil(num_cats_dogs / ncols)
plt.figure(figsize=(24,16))
for i, (name, given, p_given, pred, p_pred) in enumerate(cats_dogs, start=1):
    path = os.path.join('data/train', '0', name)
    img = Image.open(path).convert("RGB")
    plt.subplot(nrows, ncols, i)
    plt.imshow(img)
    plt.axis('off')
plt.subplots_adjust(top=1,bottom=0,left=0,right=1,hspace=0,wspace=0)
plt.show()

pic2

原始标签为狗,cleanlab 预测为猫的:

nrows = math.ceil(num_dogs_cats / ncols)
plt.figure(figsize=(24,16))
for i, (name, given, p_given, pred, p_pred) in enumerate(dogs_cats, start=1):
    path = os.path.join('data/train', '1', name)
    img = Image.open(path).convert("RGB")
    plt.subplot(nrows, ncols, i)
    plt.imshow(img)
    plt.axis('off')
plt.subplots_adjust(top=1,bottom=0,left=0,right=1,hspace=0,wspace=0)
plt.show()

pic3

可以看到上述结果中,有部分被标注错误了的,还有一部分的卡通图及其他非猫/狗图,还有一部分同时出现两种的,当然也还有有一部分出错了,但还是具有一定的参考意义。

将使用 cleanlab 清洗数据的流程写入了 sh,可以通过修改 sh 的相关变量,再调用 sh 来完成数据清洗。其中,train.sh 为单标签分类的清洗流程,train_m.sh 为多标签的清洗流程。

Code

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动手学深度学习——5. 数据清洗 的相关文章

  • 为什么我在这里遇到被零除的错误?

    所以我正在关注这个文档中的教程 https pytorch org tutorials beginner data loading tutorial html在自定义数据集上 我使用的是 MNIST 数据集 而不是教程中的奇特数据集 这是D
  • 在 PyTorch 中原生测量多类分类的 F1 分数

    我正在尝试在 PyTorch 中本地实现宏 F1 分数 F measure 而不是使用已经广泛使用的sklearn metrics f1 score https scikit learn org stable modules generat
  • torch.mm、torch.matmul 和 torch.mul 有什么区别?

    阅读完 pytorch 文档后 我仍然需要帮助来理解之间的区别torch mm torch matmul and torch mul 由于我不完全理解它们 所以我无法简明地解释这一点 B torch tensor 1 1207 0 3137
  • 如何在pytorch中查看DataLoader中的数据

    我在 Github 上的示例中看到类似以下内容 如何查看该数据的类型 形状和其他属性 train data MyDataset int 1e3 length 50 train iterator DataLoader train data b
  • LSTM 错误:AttributeError:“tuple”对象没有属性“dim”

    我有以下代码 import torch import torch nn as nn model nn Sequential nn LSTM 300 300 nn Linear 300 100 nn ReLU nn Linear 300 7
  • 使 CUDA 内存不足

    我正在尝试训练网络 但我明白了 我将批量大小设置为 300 并收到此错误 但即使我将其减少到 100 我仍然收到此错误 更令人沮丧的是 在 1200 个图像上运行 10 epoch 大约需要 40 分钟 有什么建议吗 错了 我怎样才能加快这
  • 将 Keras (Tensorflow) 卷积神经网络转换为 PyTorch 卷积网络?

    Keras 和 PyTorch 使用不同的参数进行填充 Keras 需要输入字符串 而 PyTorch 使用数字 有什么区别 如何将一个转换为另一个 哪些代码在任一框架中获得相同的结果 PyTorch 还采用参数 in channels o
  • Pytorch 损失为 nan

    我正在尝试用 pytorch 编写我的第一个神经网络 不幸的是 当我想要得到损失时遇到了问题 出现以下错误信息 RuntimeError Function LogSoftmaxBackward0 returned nan values in
  • 如何从已安装的云端硬盘文件夹中永久删除?

    我编写了一个脚本 在每次迭代后将我的模型和训练示例上传到 Google Drive 以防发生崩溃或任何阻止笔记本运行的情况 如下所示 drive path drive My Drive Colab Notebooks models if p
  • PyTorch 中的交叉熵

    交叉熵公式 但为什么下面给出loss 0 7437代替loss 0 since 1 log 1 0 import torch import torch nn as nn from torch autograd import Variable
  • Pytorch 与 joblib 的 autograd 问题

    将 pytorch 的 autograd 与 joblib 混合似乎存在问题 我需要并行获取大量样本的梯度 Joblib 与 pytorch 的其他方面配合良好 但是 与 autograd 混合时会出现错误 我做了一个非常小的例子 显示串行
  • 将 Pytorch LSTM 的状态参数转换为 Keras LSTM

    我试图将现有的经过训练的 PyTorch 模型移植到 Keras 中 在移植过程中 我陷入了LSTM层 LSTM 网络的 Keras 实现似乎具有三种状态类型的状态矩阵 而 Pytorch 实现则具有四种状态矩阵 例如 对于hidden l
  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • 在requirements.txt中包含.whl安装

    如何将其包含在requirements txt 文件中 对于Linux pip install http download pytorch org whl cu75 torch 0 1 12 post2 cp27 none linux x8
  • Pytorch - 推断线性层 in_features

    我正在构建一个玩具模型来获取一些图像并进行分类 我的模型看起来像 conv2d gt pool gt conv2d gt linear gt linear 我的问题是 当我们创建模型时 我们必须计算第一个线性层的大小in features基
  • 如何将 35 类城市景观数据集转换为 19 类?

    以下是我的代码的一小段 使用它 我可以在城市景观数据集上训练名为 lolnet 的模型 但数据集包含 35 个类别 标签 0 34 imports trainloader torch utils data DataLoader datase
  • 使用 CNN 和 pytorch 计算每个类别的准确度

    我可以使用此代码计算每个时期后的准确性 但是 我想最后计算每个班级的准确性 我怎样才能做到这一点 我有两个文件夹 train 和 val 每个文件夹有 7 个不同类别的 7 个文件夹 train 文件夹用于训练 否则 val 文件夹用于测试
  • 如何在pytorch中动态索引张量?

    例如 我有一个张量 tensor torch rand 12 512 768 我得到了一个索引列表 说它是 0 2 3 400 5 32 7 8 321 107 100 511 我希望从给定索引列表的维度 2 上的 512 个元素中选择 1
  • 将 Pytorch 模型 .pth 转换为 onnx 模型

    我有一个预训练的模型 其格式为 pth 扩展名 我想将其转换为 Tensorflow protobuf 但我没有找到任何方法来做到这一点 我见过 onnx 可以将模型从 pytorch 转换为 onnx 然后从 onnx 转换为 Tenso
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4

随机推荐