Keras-画像のラベルと番号を確認する方法


Keras-画像のラベルと番号を確認する方法

flow_from_directoryのラベルと番号を取得する方法を紹介します。

ImageDataGeneratorのflow_from_directoryを使って、データを用意する方法があります。

このflow_from_directoryを使う方法は、かなり便利、楽にデータを整理することができます。

しかし、
ラベルがどうなっているのか?
ラベルにどの番号が割り振られているのか?
が少し分かりにくくなっています。

そこで、flow_from_directoryのラベルと番号を取得する方法を紹介します。

ImageDataGeneratorで、画像を読み込む

ImageDataGeneratorは、CNNで、画像を学習させる時かなり便利な機能です。

参考:https://keras.io/ja/preprocessing/image/

ImageDataGeneratorで、正規化の設定

rescaleは、正規化

data_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

flow_from_directoryで、フォルダを指定する

trainは、ディレクトリの名前です。
target_sizeは、画像のリサイズをして、サイズの統一をします。
class_modeは、ファイルが2つであれば、binaryです。
複数であれば、categoricalです。

data = data_datagen.flow_from_directory('train',
                                                 target_size = (256, 256),
                                                 batch_size = 32,
                                                 class_mode="categorical")

画像のラベルと番号を確認する方法

ラベルは、flow_from_directoryで指定したディレクトリにある、フォルダの名前が割り当てられます。

例えば、ディレクトリに「dog」と「cat」というフォルダがあれば、ラベルは、[dog, cat]になります。

そして、そのラベルには番号が割り振られています。

それを確認するのが、今回の目的で、class_indecesの機能です。

class_indecesでラベルと番号を取得する

class_indecesは、辞書型です。

そのデータは、{label:番号}で保存されています。

label_dict = data.class_indices

predictの予測をラベルと精度で結果表示する

predictの出力結果

predictは、出力結果が返ってくる。

列ベクトルになることに注意が必要です。

pre = model.predict(x)
print(pre)

predictの結果から、ラベルを表示させる

#最大の要素のインデックスを取得
a = np.argmax(pre, axis=1)[0]
#インデックスから、ラベルを取得
keys = [k for k, v in label_dict.items() if v == a]
print(keys)

predictの結果から、正解している可能性を表示させる

predictは、列ベクトルになっていることに注意

print(pre[0][a])

参考書