Keras image_gen.flow_from_directory() 中的 class_mode 参数表示啥?

Posted

技术标签:

【中文标题】Keras image_gen.flow_from_directory() 中的 class_mode 参数表示啥?【英文标题】:what does class_mode parameter in Keras image_gen.flow_from_directory() signify?Keras image_gen.flow_from_directory() 中的 class_mode 参数表示什么? 【发布时间】:2020-04-13 18:52:41 【问题描述】:
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')

在上面的代码 sn-p 中 class_mode='binary' 表示什么。我认为这是图像类别的数量。我正在使用此代码在 Keras 中训练图像识别分类器,以在狗和猫等 2 个不同类别之间进行分类。那么如果 class_mode='binary' 是为了表示两个类别,我们如何使它成为三个或更多?

【问题讨论】:

这个可以在文档中找到,关于ti的问题就不用问了:keras.io/preprocessing/image/#flow_from_directory @MatiasValdenegro 好吧,我之前试过但没能得到它。感谢您重定向到正确的链接。我也找到了更好的解释@medium.com/@vijayabhaskar96/… 【参考方案1】:

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

【讨论】:

您好,您在引用的时候,也请提供出处。 > keras.io/api/preprocessing/image【参考方案2】:

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

课堂模式:

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

TensorFlow 文档是 here,但我认为它应该更深入地介绍 class_mode

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


稀疏和二进制一样吗?:

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

【讨论】:

我更喜欢您的答案作为公认的答案,但两个答案都无法解释标签的来源。是来自文件名还是文件夹结构等。 标签必须与数据集一起提供,或者如果模型是预训练的,它会附带模型文档。例如,标签可以在文本文件中。另一个例子是 MLKit 的内置标签模型,标签为here。我不得不抓取该网站以获取索引的 json 来标记文本。它们也可以从目录结构中生成(例如,猫的 1 个文件夹,狗的 1 个文件夹) 在tensorflow lite image classifications的情况下,你可以在这个页面上找到它:For a full list of classes, see the labels file in the model zip.storage.googleapis.com/download.tensorflow.org/models/tflite/… 我承认,在某些情况下很难找到这些标签,但每次我看够长的时间后,我都会找到它们。 标签也可以从文件夹结构/input_dir/label_a等中推断出来

以上是关于Keras image_gen.flow_from_directory() 中的 class_mode 参数表示啥?的主要内容,如果未能解决你的问题,请参考以下文章

keras如何快速入门

keras与tensorflow.python.keras - 使用哪一个?

keras 与 tensorflow.python.keras - 使用哪一个?

keras是啥

Tensorflow+Keras用Tensorflow.keras的方法替代keras.layers.merge

Tensorflow+Keras用Tensorflow.keras的方法替代keras.layers.merge