Machine learning 在数据集中使用重复项进行训练

Machine learning 在数据集中使用重复项进行训练,machine-learning,deep-learning,training-data,Machine Learning,Deep Learning,Training Data,我有一个用于分类的图像数据集。数据集非常大,大多数图像彼此重复。因此,本质上,同一个图像会多次出现。此外,数据集是不平衡的。 我理解清理重复数据集的动机。但是,这样做需要大量时间。 有没有一种方法可以在这个数据集上训练一个网络,而不过度拟合模型? 实施更严厉的正规化、辍学、惩罚损失是否仍然可以产生一个可用的模型 重复并不意味着过度拟合;他们在训练中给了这个形象更多的分量。是的,您可以在数据集上进行培训;结果将是有效的。例如,如果您有相同数量的副本(例如,所有副本的10个)。然后,你会得到与只有一

我有一个用于分类的图像数据集。数据集非常大,大多数图像彼此重复。因此,本质上,同一个图像会多次出现。此外,数据集是不平衡的。 我理解清理重复数据集的动机。但是,这样做需要大量时间。 有没有一种方法可以在这个数据集上训练一个网络,而不过度拟合模型?
实施更严厉的正规化、辍学、惩罚损失是否仍然可以产生一个可用的模型

重复并不意味着过度拟合;他们在训练中给了这个形象更多的分量。是的,您可以在数据集上进行培训;结果将是有效的。例如,如果您有相同数量的副本(例如,所有副本的10个)。然后,你会得到与只有一个(或几乎只有一个)相同的结果:洗牌顺序会稍微影响训练的平衡,因为单个图像现在可以在第1纪元开始时多次出现


你列出的各种应对措施都是防止过度装修的好工具,但你的主要危险只是你所拥有的:一小部分独特的例子的潜在影响。

重复并不意味着过度装修;他们在训练中给了这个形象更多的分量。是的,您可以在数据集上进行培训;结果将是有效的。例如,如果您有相同数量的副本(例如,所有副本的10个)。然后,你会得到与只有一个(或几乎只有一个)相同的结果:洗牌顺序会稍微影响训练的平衡,因为单个图像现在可以在第1纪元开始时多次出现


您列出的各种应对措施都是防止过度拟合的好工具,但您的主要危险只是您所拥有的:可能会有一小部分独特的示例。

正如Jon.H在评论中所建议的那样,而不是在重复的数据集上训练您的模型,您可以使用图像哈希来检测它们并将其从数据集中删除。尽管加密散列(如MD5和SHA1)足以找到精确的副本,但根据您的评论,您也希望删除类似的图像,而不仅仅是精确的副本(你真的想这样做吗?拥有一个更大的数据集通常更适合于训练,而保持类似的图像具有较小的变化(例如颜色)并不一定是一件坏事——请参见“数据扩充”)


为图像生成散列对像素的细微变化不是很可靠 值,表示肉眼看不到但 像素值不同。-Ronica Jethwa

一种解决方案是使用它,它对图像的颜色、旋转、纵横比等方面的细微差异非常鲁棒。我特别建议您尝试基于离散余弦变换的pHash算法,如中所述。有一个python库实现了它,名为
imagehash
。下面介绍如何使用它:

from PIL import Image
import imagehash

# Compute the perception-hash values (64 bit) for two images
phash_1 = imagehash.phash(Image.open('image_1'))  # e.g. d58e11ce51ee15aa 
phash_2 = imagehash.phash(Image.open('image_2'))  # e.g. d58e01ae519e559e

# Compare the images using the Hamming distance of their perception hashes
dist = phash_1 - phash_2

然后由您选择汉明距离的相似性阈值。

正如Jon.H在评论中所建议的那样,您可以使用图像哈希来检测并从数据集中删除模型,而不是在具有重复项的数据集上训练模型。尽管加密哈希(如MD5和SHA1)只需找到精确的副本就足够了,根据您的评论,您还希望去除类似的图像,而不仅仅是精确的副本(您真的想这样做吗?拥有更大的数据集通常更适合于培训,而保持类似的图像有小的变化,例如颜色,不一定是一件坏事--请参阅“数据扩充”)


为图像生成散列对像素的细微变化不是很可靠 值,表示肉眼看不到但 像素值不同。-Ronica Jethwa

一种解决方案是使用它,它对图像的颜色、旋转、纵横比等方面的细微差异非常鲁棒。我特别建议您尝试基于离散余弦变换的pHash算法,如中所述。有一个python库实现了它,名为
imagehash
。下面介绍如何使用它:

from PIL import Image
import imagehash

# Compute the perception-hash values (64 bit) for two images
phash_1 = imagehash.phash(Image.open('image_1'))  # e.g. d58e11ce51ee15aa 
phash_2 = imagehash.phash(Image.open('image_2'))  # e.g. d58e01ae519e559e

# Compare the images using the Hamming distance of their perception hashes
dist = phash_1 - phash_2

然后由您选择汉明距离的相似性阈值。

为这个老问题添加我的分数

在培训过程中,只有当您在一个批次中很有可能有多个副本时,才会出现问题。
假设您选择的批大小为64;因为您将随机采样图像以组成批,因此平均只有2个副本。这实际上取决于图像的复制次数(平均)与图像总数的比例

无论如何,通过使用(在线)数据增强,即使在相同的图像之间,也会引入一些差异,从而缓解了这个问题


最大的问题是在测试集上,因为准确度估计将偏向于具有更多副本的图像,因此我将投入工作并消除测试(和验证)集的重复。

为这个老问题添加我的一分

在培训过程中,只有当您在一个批次中很有可能有多个副本时,才会出现问题。
假设您选择的批大小为64;因为您将随机采样图像以组成批,因此平均只有2个副本。这实际上取决于图像的复制次数(平均)与图像总数的比例

无论如何,通过使用(在线)数据增强,即使在相同的图像之间,也会引入一些差异,从而缓解了这个问题


最大的问题是在测试集上,因为准确度估计将偏向于具有更多副本的图像,因此我将采取措施消除测试(和验证)集的重复。

如果验证集中的图像与训练集中的图像相同,但测试集中的图像不同,则验证将提供更好的结果