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

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

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

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

Python

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

Q&A

解決済

1回答

719閲覧

Keras 機械学習

22Go

総合スコア55

Keras

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

Python

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

0グッド

0クリップ

投稿2019/08/07 22:43

tensorflowで機械学習を行なっています。
画像分類を行なっているのですが、学習終了後にtestに入っている画像を分類し、誤分類であれば何と間違ったか表示できるような関数を加えたいです。

python

1# coding:utf-8 2import keras 3from keras.utils import np_utils 4from keras.layers.convolutional import Conv2D, MaxPooling2D 5from keras.models import Sequential 6from keras.layers.core import Dense, Dropout, Activation, Flatten 7from keras.preprocessing.image import array_to_img, img_to_array, list_pictures, load_img 8import numpy as np 9import pandas as pd 10import matplotlib.pyplot as plt 11import seaborn as sns 12from sklearn.metrics import confusion_matrix 13from sklearn.neighbors import KNeighborsClassifier 14from sklearn.model_selection import train_test_split 15 16X = []#train 17Y = [] 18A = []#validation 19B = [] 20V = []#test 21W = [] 22 23ep = 10 24size = 10,10 25 26 27 28# aの画像 29for picture in list_pictures('dir/train/a'): 30 img = img_to_array(load_img(picture, target_size=(size))) 31 X.append(img) 32 Y.append(0) 33 34for picture in list_pictures('dir/vali/a'): 35 img = img_to_array(load_img(picture, target_size=(size))) 36 A.append(img) 37 B.append(0) 38 39for picture in list_pictures('dir/test/a'): 40 img = img_to_array(load_img(picture, target_size=(size))) 41 V.append(img) 42 W.append(0) 43 44# bの画像 45for picture in list_pictures('dir/train/b'): 46 img = img_to_array(load_img(picture, target_size=(size))) 47 X.append(img) 48 Y.append(1) 49 50for picture in list_pictures('dir/vali/b'): 51 img = img_to_array(load_img(picture, target_size=(size))) 52 A.append(img) 53 B.append(1) 54 55for picture in list_pictures('dir/test/b'): 56 img = img_to_array(load_img(picture, target_size=(size))) 57 V.append(img) 58 W.append(1) 59 60# cの画像 61for picture in list_pictures('dir/train/c'): 62 img = img_to_array(load_img(picture, target_size=(size))) 63 X.append(img) 64 Y.append(2) 65 66for picture in list_pictures('dir/train/c'): 67 img = img_to_array(load_img(picture, target_size=(size))) 68 A.append(img) 69 B.append(2) 70 71for picture in list_pictures('dir/train/c'): 72 img = img_to_array(load_img(picture, target_size=(size))) 73 V.append(img) 74 W.append(2) 75 76X = np.asarray(X) 77Y = np.asarray(Y) 78A = np.asarray(A) 79B = np.asarray(B) 80V = np.asarray(V) 81W = np.asarray(W) 82 83# 画素値を0から1の範囲に変換 84X = X.astype('float32') 85X = X / 255.0 86A = A.astype('float32') 87A = A / 255.0 88V = V.astype('float32') 89V = V / 255.0 90 91# クラスの形式を変換 92Y = np_utils.to_categorical(Y, 3)#(ベクトル変換したいラベル、配列数) 93B = np_utils.to_categorical(B, 3) 94W = np_utils.to_categorical(W, 3) 95 96X_train, Y_train = (X, Y) 97A_vali, B_vali = (A, B) 98V_test, W_test = (V, W) 99 100# 【CNNを構築】 101model = Sequential() 102model.add(Conv2D(32, (3, 3), padding='same', 103 input_shape=X_train.shape[1:])) 104model.add(Activation('relu')) 105model.add(Conv2D(32, (3, 3))) 106model.add(Activation('relu')) 107model.add(MaxPooling2D(pool_size=(2, 2))) 108model.add(Dropout(0.4)) 109model.add(Conv2D(64, (3, 3), padding='same')) 110model.add(Activation('relu')) 111model.add(Conv2D(64, (3, 3))) 112model.add(Activation('relu')) 113model.add(MaxPooling2D(pool_size=(2, 2))) 114model.add(Dropout(0.4)) 115model.add(Flatten()) 116model.add(Dense(512)) 117model.add(Activation('relu')) 118model.add(Dropout(0.4)) 119model.add(Dense(3))#カテゴリー数 120model.add(Activation('softmax')) 121 122# 【コンパイル】 123model.compile(loss='categorical_crossentropy',#損失関数 124 optimizer='adam',#最適化、オブジェクト 125 metrics=['accuracy'])#評価関数、正解率 126 127#【学習実行】 128history = model.fit(X_train, Y_train, batch_size=2048, epochs=ep, 129 validation_data = (A_vali, B_vali), verbose = 1) 130 131score = model.evaluate(V_test, W_test, verbose = 1) 132print("test_acc", score[1], "test_loss", score[0]) 133 134 135#def 画像分類 136#ここにdir/test/*.pngの画像を全て表示後に何に分類されたか、間違った場合はどのような画像を間違ったのか表示したい 137

heatmapの実装もできたのですが、何と間違えたのか知りたいと考えました。

python

1import cv2 2import numpy as np 3 4size = 10,10,3 5# ラベル情報 6labels = ["a", "b", "c"] 7 8# モデルデータを読み込み 9model.load_weights('mdoel') 10 11im = cv2.imread('dir/test/*.png')##########input_pic########### 12im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) 13im = cv2.resize(im, (10,10)) 14plt.imshow(im) 15plt.show() 16 17im = im.reshape(size).astype('float32') / 255##########サイズ変更############# 18r = model.predict(np.array([im]), batch_size=32,verbose=1) 19res = r[0] 20 21for i, acc in enumerate(res): 22 print(labels[i], "=", int(acc * 100)) 23 24print("---") 25print("予測した結果=", labels[res.argmax()]) 26 27

print("予測した結果=", labels[res.argmax()])

の下に

dir/test/*.pngをループで読み込んで表示し、予測結果をprintし
ifで正解だった場合はそのままで
elseとして、何と間違ったのかとあらかじめ設定した画像を表示できるようにしたいです

宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ここまでできているならあとは普通に

ifで正解だった場合

im の正解ラベル(0~2)と res.argmax() を比較する

何と間違ったのか

まさに
print("予測した結果=", labels[res.argmax()])
の部分ですね。

あらかじめ設定した画像を表示

あらかじめ設定した画像、が何かはわからないですが、
そのコードにもあるように plt.show() などで表示してみる、とかではどうでしょう。

あとたぶん本題とは関係ないですが、
dir/train/c が 3回読み込まれていますね。 2,3回目は vali, test が正しそうです。

投稿2019/08/08 06:42

編集2019/08/08 06:43
mokemokechicken

総合スコア948

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問