質問するログイン新規登録

質問編集履歴

1

現在の状況をアップデートしました。

2020/05/31 02:11

投稿

sssan
sssan

スコア10

title CHANGED
File without changes
body CHANGED
@@ -5,53 +5,18 @@
5
5
  3. Trainデータ、Validationデータを使ったモデルの評価、保存
6
6
  4. 作成したモデルとTestデータを使用した画像分類
7
7
 
8
+ ここで手順3のモデル評価時にValidationデータの予想結果を混合行列を使って可視化したいと思っています。
9
+ sklearnのconfusion_matrix()とmatplotlibを用いて下記Figure1のような混合行列を表示・保存したいです。
10
+ 現在Figure2のような状態なのですが、
11
+ ・Figure1のようにどの画像で何枚間違えたかを可視化する方法がわからない
12
+ ・Figure2のA, Dの部分の見切れた部分をどうにかしたい
8
- 画像データ格納フォルダの階層は次のよな感じです。
13
+ とい状況、この打開策をご教授頂きたく思います。
14
+ ![イメージ説明](1a038f9f312d121c0475601309d8bae4.png)
9
15
 
10
- processed
11
- -Train
12
- --A
13
- ---sample01.png
14
- ---sample02.png
15
-   ・・・
16
- --B
17
- --C
18
- --D
19
- -Validation
20
- --A
21
- --B
22
- --C
23
- --D
24
- -Test
25
- --A
26
- --B
27
- --C
28
- --D
29
-
30
- ここで手順3のモデル評価時にValidationデータの予想結果を混合行列を使って可視化したいと思っています。(accやlossは図示できました)
31
- confusion_matrix()を使い、引数に実クラスと予想クラスを入れればいいと思うのですが、
32
- 実クラスと予想クラスの抽出方法がわかりません。
33
- ネットに出てくる例だとImageDataGeneratorを使わずに画像を読み込み、行列に変換してやっているのを見るのですが、
34
- ImageDataGeneratorを使って画像を読み込んだ際にはどのような処理をすればいいのでしょうか?
35
-
36
16
  現在のコードは下記の通りです。
37
- このコードの下にどのような記述をすればいいのかご教授お願い致します。
38
17
 
39
18
  ```ここに言語を入力
40
- import os
41
- import random
42
- from pathlib import Path
43
- import matplotlib.pyplot as plt
44
- import numpy as np
19
+ #ライブラリのインポート部分は省略
45
- import keras.models
46
- from keras.models import Model
47
- from keras.models import Sequential
48
- from keras.layers import Dense, Input, Activation, Dropout, Flatten
49
- from keras.layers import Conv2D, MaxPooling2D, GlobalAveragePooling2D
50
- from keras.layers import MaxPool2D
51
- from keras.applications.vgg16 import VGG16
52
- from keras.preprocessing.image import ImageDataGenerator
53
- from keras.preprocessing.image import img_to_array, load_img
54
- from keras.optimizers import Adam, RMSprop, SGD
55
20
 
56
21
  program_path = Path(__file__).parent.resolve()
57
22
  parent_path = program_path.parent.resolve()
@@ -125,7 +90,7 @@
125
90
  target_size=(input_image_size,input_image_size),
126
91
  batch_size=batch_size,
127
92
  class_mode='categorical',
128
- shuffle=True
93
+ shuffle=False
129
94
  )
130
95
 
131
96
  history=model.fit_generator(
@@ -134,7 +99,51 @@
134
99
  verbose=1,
135
100
  validation_data=validation_generator
136
101
  )
102
+
103
+ #Confution Matrix and Classification Report
104
+ def plot_confusion_matrix(cm, classes, cmap):
105
+
106
+  plt.imshow(cm, cmap=cmap)
107
+ plt.colorbar()
108
+ plt.ylabel('True label')
109
+ plt.xlabel('Predicted label')
110
+ plt.title('Confusion Matrix')
111
+ tick_marks = np.arange(len(classes))
112
+ plt.xticks(tick_marks, classes, rotation=45)
113
+ plt.yticks(tick_marks, classes)
114
+ plt.tight_layout()
115
+ plt.savefig(os.path.join(result_path, 'confuse_' + file_name + '.png'))
116
+
117
+ Y_pred = model.predict_generator(validation_generator)
118
+ y_pred = np.argmax(Y_pred, axis=1)
119
+ true_class = validation_generator.classes
120
+ class_labels = list(validation_generator.class_indices.keys())
121
+ cm = confusion_matrix(true_class, y_pred)
122
+ cmap = plt.cm.Blues
123
+ plot_confusion_matrix(cm, classes=class_labels, cmap=cmap)
137
124
  ```
138
125
 
126
+ ちなみに画像データ格納フォルダの階層は次のような感じです。
139
127
 
128
+ data
129
+ -processed
130
+ --Train
131
+ ---A
132
+ ----sample01.png
133
+ ----sample02.png
134
+   ・・・
135
+ ---B
136
+ ---C
137
+ ---D
138
+ --Validation
139
+ ---A
140
+ ---B
141
+ ---C
142
+ ---D
143
+ --Test
144
+ ---A
145
+ ---B
146
+ ---C
147
+ ---D
148
+
140
149
  初心者的な質問になってしまっているかもしれませんが、よろしくお願いします。