質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

5656閲覧

画像分類における混合行列の表示方法

sssan

総合スコア10

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/27 07:52

編集2020/05/31 02:11

現在kerasを使った画像分類タスク(今回は4つのクラス分類)を勉強中です。
画像の元データが少ないので以下のような手順でプログラムを作成しようとしています。

  1. Trainデータの水増し(ImageDataGenerator)
  2. ファインチューニングを使ったモデルの構築
  3. Trainデータ、Validationデータを使ったモデルの評価、保存
  4. 作成したモデルとTestデータを使用した画像分類

ここで手順3のモデル評価時にValidationデータの予想結果を混合行列を使って可視化したいと思っています。
sklearnのconfusion_matrix()とmatplotlibを用いて下記Figure1のような混合行列を表示・保存したいです。
現在Figure2のような状態なのですが、
・Figure1のようにどの画像で何枚間違えたかを可視化する方法がわからない
・Figure2のA, Dの部分の見切れた部分をどうにかしたい
という状況で、この打開策をご教授頂きたく思います。
イメージ説明

現在のコードは下記の通りです。

#ライブラリのインポート部分は省略 program_path = Path(__file__).parent.resolve() parent_path = program_path.parent.resolve() data_path = parent_path / 'data' data_processed_path = data_path / 'processed' train_dir = os.path.join(data_processed_path, 'Train') validation_dir = os.path.join(data_processed_path, 'Validation') test_dir = os.path.join(data_processed_path, 'Test') label = os.listdir(test_dir) n_categories = len(label) n_epochs = 500 batch_size = 8 input_image_size = 224 def create_vgg16(): base_model = VGG16( include_top = False, weights = "imagenet", input_shape = None ) x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(1024, activation = 'relu')(x) predictions = Dense(n_categories, activation = 'softmax')(x) model = Model(inputs = base_model.input, outputs = predictions) for layer in model.layers[:17]: layer.trainable = False for layer in model.layers[17:]: layer.trainable = True return model model = create_vgg16() model.compile( optimizer = Adam(), loss = 'categorical_crossentropy', metrics = ["accuracy"] ) train_datagen=ImageDataGenerator( rescale=1.0/255, shear_range=0.2, zoom_range=0.2, vertical_flip=True, horizontal_flip=True, height_shift_range=0.5, width_shift_range=0.5, channel_shift_range=5.0, brightness_range=[0.3,1.0], fill_mode='nearest ) validation_datagen=ImageDataGenerator(rescale=1.0/255) train_generator=train_datagen.flow_from_directory( train_dir, target_size=(input_image_size,input_image_size), batch_size=batch_size, class_mode='categorical', shuffle=True ) validation_generator=validation_datagen.flow_from_directory( validation_dir, target_size=(input_image_size,input_image_size), batch_size=batch_size, class_mode='categorical', shuffle=False ) history=model.fit_generator( train_generator, epochs=n_epochs, verbose=1, validation_data=validation_generator ) #Confution Matrix and Classification Report def plot_confusion_matrix(cm, classes, cmap):  plt.imshow(cm, cmap=cmap) plt.colorbar() plt.ylabel('True label') plt.xlabel('Predicted label') plt.title('Confusion Matrix') tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) plt.tight_layout() plt.savefig(os.path.join(result_path, 'confuse_' + file_name + '.png')) Y_pred = model.predict_generator(validation_generator) y_pred = np.argmax(Y_pred, axis=1) true_class = validation_generator.classes class_labels = list(validation_generator.class_indices.keys()) cm = confusion_matrix(true_class, y_pred) cmap = plt.cm.Blues plot_confusion_matrix(cm, classes=class_labels, cmap=cmap)

ちなみに画像データ格納フォルダの階層は次のような感じです。

data
-processed
--Train
---A
----sample01.png
----sample02.png
・・・
---B
---C
---D
--Validation
---A
---B
---C
---D
--Test
---A
---B
---C
---D

初心者的な質問になってしまっているかもしれませんが、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

公式の scikit-learn Confusion matrix のページにコード例付きで混同行列の可視化例があります。

なさりたいことのそのままじゃないでしょうか。

投稿2020/07/25 06:44

aokikenichi

総合スコア2218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問