是否可以从目录更改Keras流的类索引

时间:2018-12-22 00:57:35

标签: python keras conv-neural-network

我正在使用自己的图像数据生成器。它将生成0、90、180和270度旋转的图像批处理版本,并将它们及其类返回。我使用内置的ImageDataGenerator函数来测试模型。但是flow_from_directory会生成不同的类索引。 train_generator.class_indices的输出为{'0': 0, '90': 1, '180': 2, '270': 3}。但是test_generator.class_indices返回{'0': 0, '180': 1, '270': 2, '90': 3}。我可以简单地更改旋转角度的顺序,但是此问题是由操作系统的文件系统引起的,因此我将在其他操作系统上运行代码。在这种情况下,我需要一个自动化的解决方案。有没有办法改变flow_from_directory方法的类索引?

2 个答案:

答案 0 :(得分:1)

看起来可以做到

flow_from_directory(directory, 
                    classes={'0': 0, 
                             '90': 1, 
                             '180': 2, 
                             '270': 3}
                   )

答案 1 :(得分:1)

绝对可以,而且可以。

摘自Keras官方文件:https://keras.io/api/preprocessing/image/ flow_from_directory flow_from_dataframe 方法都有一个参数名称 classes

对于 flow_from_directory ,它说明:

:类子目录的可选列表(例如['dogs','cats'])。默认值:无。如果未提供,则会从目录下的子目录名称/结构自动推断出类列表,其中每个子目录将被视为一个不同的类(并且映射到标签索引的类顺序将为字母数字)。可以通过属性class_indices获得包含从类名到类索引的映射的字典。

这意味着,当在您的 flow_from_directory 方法中指示方法类= ['dogs','cats']时,标签“ dogs”,然后“ cats”将按照列表顺序映射到标签索引中,即,0、1 ...

如果不这样做,它们将按字母数字顺序排列,“ dogs”为1,而“ cats”为0。