gpt4 book ai didi

python - 如何为 ImageDataGenerator 中生成的样本分配标签

转载 作者:行者123 更新时间:2023-12-01 09:29:18 28 4
gpt4 key购买 nike

我是卷积神经网络的新手,我即将构建我的第一个 ConvNet,它是一个多类图像分类 ConvNet。

型号说明

假设我有两个图像文件夹,一个包含数千张特定类型叶子的图像(叶子 A)(图像集 X),另一个文件夹包含相同数量的相似类型叶子的图像(叶子 B)(图像集 Y)。所以我需要训练我的模型来区分这两种类型。

问题背景

由于我有两类输出 Leaves A 和 Leaves B,因此对于给定的 Leaves A 类或 Leaves B 类图像,我要么将 0,1 作为输出,要么将 1,0 作为输出。

                            Leaves A | Leaves B
If Input is a Class A Leaf, 1 0
If Input is a Class B Leaf, 0 1

问题

因此,为了做到这一点,我必须将图像集 X 标记为输出 1,0,将图像集 Y 标记为输出 0,1。另外,由于我需要增强图像以获得更多训练样本,因此我使用了 ImageDataGenerator。

training_imGen.flow_from_directory(
'path/to/image_folder_X',
target_size=(1100,180),
batch_size=batchSize,
color_mode='rgb',
class_mode='categorical'
)

但在这里我无法分配标签。不像我使用 training_imGen.flow 时那样。但是我发现classes参数可以在flow_from_directory下调用,

classes:类子目录的可选列表(例如['dogs','cats'])。默认值:无。如果未提供,类列表将自动从目录下的子目录名称/结构中推断出来,其中每个子目录将被视为不同的类(并且将映射到标签索引的类的顺序将是字母数字)。

但我不知道如何在那里指定两个类标签,因为我只提供了 image set X 文件夹的路径。有什么想法如何做到这一点吗?

更新

training_imGen.flow_from_directory(
'/Users/user/database/',
target_size=(1100,180),
batch_size=batchSize,
color_mode='rgb',
class_mode='categorical',
classes=['Set_A', 'Set_B']
)

/Users/user/database/路径下,有两个文件夹,分别为Set_ASet_B。正如我所提到的,每个文件夹都包含相关的 png 图像文件。

最佳答案

查看如何 DirectoryIterator已实现。这是一个非常简单的类。

ImageDataGenerator#flow_from_directory 只是 DirectoryIterator 对象构造的包装器。您不必手动指定标签,因为 DirectoryIterator 将自动假定每个示例都与以该示例的父文件夹命名的类关联。因此,只要叶子 A 的所有样本都位于名为 A 的同一个文件夹中,而叶子 B 的样本则位于不同的文件夹中,它们将被正确分配到各自的类(class)。

此外,迭代器的输出已经是 one-hot 编码的,正如您将 class_mode 定义为 categorical 一样:

g = ImageDataGenerator()
train = g.flow_from_directory('/path/to/dataset/train/',
batch_size=32,
target_size=(1100, 180))

x_batch, y_batch = next(train)
assert x_batch.shape == (32, 1100, 180, 3)
assert y_batch.shape == (32, 2)
print(y_batch)
[[0. 1.],
[1. 0.],
[1. 0.],
...
[0. 1.]]

classes 参数不用于设置每个样本的标签,而是指定 directory 的子文件夹列表,这些子文件夹应被视为类该迭代器(例如 ['A', 'B'])。如果保留默认的 None ,则 directory 的所有子文件夹都被视为有效类,并且其中的所有图像都是该集合的潜在样本。当您只想使用标签子集、调试代码或推迟类时,这非常有用。

如果您希望覆盖默认标签,则只需替换 DirectoryIterator#classes 中的内容即可,其中包含与 ith<​​ 示例关联的类,其第一个元素。例如,假设您要添加没有关联文件夹的第三类叶子:

train = g.flow_from_directory(...)
train.classes = np.asarray([0., 1., 2., ..., 0., 1.])
train.class_indices = {'A': 0, 'B': 1, 'C': 2}
train.num_classes = 3

关于python - 如何为 ImageDataGenerator 中生成的样本分配标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50105143/

28 4 0