web-dev-qa-db-ja.com

複数のクラスでトレーニングするときにKerasでラベルIDを取得するにはどうすればよいですか?

flow_from_directory を使用して、次の構造のフォルダーからトレーニングセットを取得しています。

train
  class1
  class2
  class3
  ...

ジェネレーターは次のように呼び出されます。

train_generator = train_datagen.flow_from_directory( 
        train_data_dir,                              
        target_size=(img_height, img_width),         
        batch_size=32,                               
        class_mode='categorical')  

引数classesを設定していませんが、ラベルをアルファベット順に取得することを期待していました。

classes:オプションのクラスサブディレクトリのリスト(例:['dogs', 'cats'])。デフォルト:なし。指定しない場合、クラスのリストが自動的に推測されます(および、ラベルインデックスにマップされるクラスの順序は英数字になります)。

ただし、トレーニング画像を分類すると(どのラベルが返されているかを確認するため)、特定の順序を取得できません。トレーニングは適切に行われ(精度は約85%)、同じクラスの画像を分類するときに、出力ラベルと一貫性があります。

flow_from_directoryによって生成されたラベル番号を推測してクラスにマッピングするにはどうすればよいですか?

14
Fábio Perez

変数ImageDataGenerator.class_indicesを見ると、どのクラスがどの整数に対応するかがわかります。

使い方の例はこちら

    def build(source=None):
        datagen = ImageDataGenerator(rescale=1. / 255)
        data_generator = datagen.flow_from_directory(
        source,  # this is the target directory
        target_size=(150, 150),  # all images will be resized to 150x150
        batch_size=11,
        class_mode='sparse')
        class_dictionary = data_generator.class_indices
    return data_generator, class_dictionary
20
emanuele