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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

512閲覧

kerasで各ラベルに対するCNNの精度を見たい。

Uta_fai

総合スコア18

Keras

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/01/10 06:23

前提・実現したいこと

KerasによるCNNの実装で、各ラベルに対する精度を出力したいです。

該当のソースコード

Python

1from keras.models import Sequential 2from keras.layers import Dense, Dropout, Flatten 3from keras.layers import Conv2D, MaxPooling2D 4import keras 5from keras import backend as K 6from keras.layers.advanced_activations import LeakyReLU 7import pickle 8import numpy as np 9from keras.utils import np_utils 10from sklearn.preprocessing import MinMaxScaler 11from keras import optimizers 12from sklearn.model_selection import StratifiedKFold 13from sklearn.model_selection import train_test_split 14 15memory=[]#memorize history 16LR=keras.layers.LeakyReLU(alpha=0.3) 17# difine sgd 18sgd= optimizers.SGD(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True) 19adagrad=optimizers.Adagrad(lr=0.001, epsilon=None, decay=0.0) 20 21batch_size =32 22num_classes=5 23epochs=2000 24 25with open('datawh',mode='rb') as f: 26 X=pickle.load(f) 27with open('labelwh',mode='rb')as f: 28 Y=pickle.load(f) 29 30X= np.array(X).astype('float32') 31Y= np.array(Y).astype('int32') 32 33x_train, x_test, y_train, y_test = train_test_split(X, Y, train_size=0.8, random_state=2) 34 35 36 37print(x_train.shape) 38print(x_test.shape) 39 40x_train = np.expand_dims(x_train,axis=-1) 41x_test = np.expand_dims(x_test,axis=-1) 42y_train= np_utils.to_categorical(y_train,num_classes) 43y_test = np_utils.to_categorical(y_test,num_classes) 44 45input_shape=(274,30,1) 46 47 48model = Sequential() 49model.add(Conv2D(32, kernel_size=(3,3), 50 activation='tanh', 51 input_shape=input_shape)) 52model.add(Conv2D(32, (3, 3), activation='tanh')) 53model.add(MaxPooling2D(pool_size=(5,3))) 54model.add(Conv2D(32, (3, 3), activation='tanh')) 55model.add(Conv2D(32, (3, 3), activation='tanh')) 56model.add(MaxPooling2D(pool_size=(5,3))) 57model.add(Dropout(0.5)) 58model.add(Flatten()) 59model.add(Dense(num_classes, activation='softmax',init='glorot_normal')) 60 61 62model.compile(loss=keras.losses.categorical_crossentropy, 63 optimizer=sgd, 64 metrics=['accuracy']) 65model.summary() 66 67history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, 68 verbose=0,validation_data=(x_test, y_test)) 69score = model.evaluate(x_test, y_test, verbose=0) 70 71print('finish')

補足情報(FW/ツールのバージョンなど)

GoogleColab上で処理を行なっています。
Kerasで5種のラベルに対する各々精度を出力できるようにしたいです。
回答よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

スマートなやり方ではないですが、以下のコードでできると思います。
ちなみに精度は各ラベルに対して(そのラベルの正解数)÷(そのラベルの総数)として算出しています。

python

1predictions = model.predict(x_test) # モデルの出力取得 2correct_count = [0] * num_classes 3count = [0] * num_classes 4 5for i in range(predictions.shape[0]): 6 prediction = np.argmax(predictions[i]) # モデルの予測ラベル取得 7 answer = y_test[i] 8 count[answer] += 1 9 if prediction == answer: 10 correct_count[answer] += 1 # 正解数カウント 11 12accuracy = [correct/N for correct, N in zip(correct_count, count)] # 精度算出 13 14for label, acc in enumerate(accuracy): 15 print('accuracy for label {} : {}'.format(label, acc)) 16

投稿2019/11/22 04:00

tkymtmt

総合スコア143

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

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

Uta_fai

2019/11/25 07:18

ありがとうございます。出力結果の取り扱いかたの勉強になりました。 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問