Keras image_gen.flow_from_directory() 中的 class_mode 参数是什么意思?

Har*_*war 17 image-processing training-data neural-network keras tensorflow

train_image_gen = image_gen.flow_from_directory('/Users/harshpanwar/Desktop/Folder/train',
                                               target_size=image_shape[:2],
                                               batch_size=batch_size,
                                               class_mode='binary')
Run Code Online (Sandbox Code Playgroud)

在上面的代码片段中 class_mode='binary' 表示什么。我认为这是针对图像类别的数量。我正在使用此代码在 Keras 中训练图像识别分类器以在 2 个不同类别(如狗和猫)之间进行分类。因此,如果 class_mode='binary' 用于表示两个类别,我们如何将其设为三个或更多?

小智 12

class_mode:“分类”、“二进制”、“稀疏”、“输入”或无之一。默认值:“分类”。确定返回的标签数组的类型:-“分类”将是二维单热编码标签,-“二进制”将是一维二进制标签,“稀疏”将是一维整数标签,-“输入”将是相同的图像输入图像(主要用于使用自动编码器)。- 如果为 None,则不返回标签(生成器将只生成批量图像数据,这对于与 model.predict_generator() 一起使用很有用)。请注意,在 class_mode None 的情况下,数据仍需要驻留在目录的子目录中才能正常工作。

  • 您好,引用某物时,请同时注明出处。> https://keras.io/api/preprocessing/image/ (5认同)

Ben*_*rth 5

假设您的数据集中有 N 个类。如果您有 4 个标签,狗(索引 0)、猫(1)、驴(2)和人(3),N 将为 4。

班级模式:

  • "categorical": 2D 输出(又名长度为 N 的数字列表),[0, 0, 1, 0],这是一种代表驴的单热编码(只有一个数字是 1/“热”)。这是用于互斥的标签。狗不能是猫,人不能是狗。
  • "binary": 1D 输出(也就是1 个数字),它是 0、1、2、3 ... N。之所以这样称呼是因为它是二进制的,如果只有两个类(恕我直言,这是一个糟糕的原因),source。我建议仅将“二进制”用于单标签分类,因为它在代码中记录您的意图。
  • "sparse": 挖了代码,这和“二进制”是一样的。逻辑是用 完成的elif self.class_mode in {'binary', 'sparse'}:,之后不再使用 class_mode。不过,我建议使用“稀疏”进行多标签分类,同样是因为它在代码中记录了您的意图。
  • "input":标签实际上又是图像。因此,狗图像的标签是相同的狗图片数组。如果我对自动编码器了解更多,我可能能够进一步解释。
  • None:没有标签,因此对训练没有用,但用于推理/预测。

TensorFlow 文档在这里,但我认为它应该更深入class_mode

“分类”、“二进制”、“稀疏”、“输入”或无之一。默认值:“分类”。确定返回的标签数组的类型:-“分类”将是二维单热编码标签,-“二进制”将是一维二进制标签,“稀疏”将是一维整数标签,-“输入”将是相同的图像输入图像(主要用于使用自动编码器)。- 如果为 None,则不返回标签(生成器将只生成批量图像数据,这对于与 model.predict() 一起使用很有用)。请注意,在 class_mode None 的情况下,数据仍需要驻留在目录的子目录中才能正常工作。


稀疏与二进制相同吗?:

正如您在我的搜索结果中看到的,稀疏只检查了两次(搜索结果中的第 2 行和第 4 行)。我相信“sparse”的意图是用于多标签分类,而“binary”是为单标签分类(Hot-dog vs. No hotdog)设计的,但目前没有区别,因为行为是相同的: 在此处输入图片说明