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_indicesです。スペルミスしていました。
class_indicesでラベルと番号を取得する
class_indecesは、辞書型です。
class_indicesは、辞書型です。
そのデータは、{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])