🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Keras

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

深層学習

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Q&A

1回答

899閲覧

ROCの実装についての質問

kmkkaoj

総合スコア0

Keras

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

深層学習

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

0グッド

0クリップ

投稿2021/01/09 16:30

DenseNet-121を学んでいます。

ROCを実装して可視化を行いたいのですが、
どうすればよいでしょうか?

Tensor

1import os 2from glob import glob 3# import imageio 4from PIL import Image 5import cv2 6import numpy as np 7import matplotlib.pyplot as plt 8 9import keras 10from keras.applications.densenet import DenseNet121 11from keras.applications.densenet import preprocess_input 12from keras.models import Sequential, Model, load_model 13from keras.layers import Dense, BatchNormalization, GlobalAveragePooling2D, Conv2D, Flatten 14from keras.optimizers import Adam 15from keras.preprocessing.image import ImageDataGenerator 16from keras.callbacks import EarlyStopping, ModelCheckpoint 17 18from sklearn.metrics import confusion_matrix 19from sklearn.metrics import classification_report 20from sklearn.model_selection import train_test_split 21 22import math 23from keras.utils import Sequence, np_utils 24 25 26# モデルを編集し、ネットワークを構築する関数 27# ----------------------------------------------------- 28def build_model(base_model): 29 x = base_model.output 30 31 # 追加する出力部分の層を構築 32 x = Flatten()(x) 33 x = Dense(1024, activation='relu')(x) 34 output = Dense(1, activation='sigmoid')(x) # 2値分類なので出力層は1, sigmoidで確率を求める 35 return Model(inputs=base_model.input, outputs=output) 36 37 38# ---------------------------------------- 39# テスト画像での精度評価 40# ---------------------------------------- 41def test_img_prediction(valid_generator, test_batch_size): 42 # テスト画像での推測 43 true_label = [] 44 pred_label = [] 45 for i, (x, y) in enumerate(valid_generator): 46# print(x, y) 47 true_label.extend(y) 48 prediction = model.predict(x, verbose=2) 49 print(prediction[0]) 50 pred_label.extend(np.round(prediction[0])) 51 # ジェネレータは無限ループするので、全部取得したら止める 52 if (i+1) >= (len(valid_generator) / test_batch_size): 53 break 54 print('true: ', len(true_label), 'pred: ', len(pred_label)) 55 return true_label, pred_label 56 57 58# -------------------------------------------- 59# Confusion Matrixの生成 60# -------------------------------------------- 61def show_report(true_label, pred_label): 62 cm = confusion_matrix(true_label, pred_label) 63 print('\n----------------- Confusion Matrix -----------------\n', cm) 64 cr = classification_report(true_label, pred_label) 65 print('\n----------------- Classification Report -----------------\n', cr) 66 67 68# --------------------------------------- 69# 学習の可視化する関数 70# --------------------------------------- 71def show_train_history(history, epochs): 72 acc = history.history['acc'] 73 val_acc = history.history['val_acc'] 74 75 loss = history.history['loss'] 76 val_loss = history.history['val_loss'] 77 78 epochs_range = range(epochs) 79 80 plt.figure(figsize=(14, 5)) 81 plt.subplot(1, 2, 1) 82 plt.plot(epochs_range, acc, label='Training Accuracy') 83 plt.plot(epochs_range, val_acc, label='Validation Accuracy') 84 plt.legend(loc='best') 85 plt.title('Training and Validation Accuracy') 86 87 plt.subplot(1, 2, 2) 88 plt.plot(epochs_range, loss, label='Training Loss') 89 plt.plot(epochs_range, val_loss, label='Validation Loss') 90 plt.legend(loc='upper right') 91 plt.title('Training and Validation Loss') 92 # plt.savefig('CT_classification.png') 93 plt.show() 94 plt.close() 95 96 97# ----------------------------------------------------- 98 99# ---------------------------------- 100# 各パラメータの設定 101# ---------------------------------- 102# n_classes = 3 # 分類するクラス数 103epochs = 10 # 学習のエポック数 104batch_size = 32 # 訓練時のバッチサイズ 105test_batch_size = 1 # テスト時のバッチサイズ(全テスト画像数で割り切れる値にする) 106height, width = 277, 277 # 入力画像のサイズ 107 108# データの読み込み 109train_data = np.load('/home/dl_box85/dataset/npy/train_data.npy') 110train_label = np.load('/home/dl_box85/dataset/npy/train_label.npy') 111test_data = np.load('/home/dl_box85/dataset/npy/test_data.npy') 112test_label = np.load('/home/dl_box85/dataset/npy/test_label.npy') 113 114print(test_label) 115print(train_label) 116 117 118# データのトランスポーズ 119train_data = np.transpose(train_data, (3,1,2,0)) 120test_data = np.transpose(test_data, (3,1,2,0)) 121 122print(train_data.shape) 123 124# ------------------------------------------- 125# 画像を読み込むジェネレータの作成 126# ------------------------------------------- 127# ジェネレータの作成 128idg = ImageDataGenerator(validation_split=0.25) 129idg_test = ImageDataGenerator() 130 131# 適用 132idg.fit(train_data) 133 134 135 136 137 138# 画像をロードするイテレータを生成 139# 訓練用データ 140img_itr_train = idg.flow( 141 train_data, 142 y=train_label, 143 batch_size=16, 144 shuffle=True, 145 subset='training' 146) 147# 検証用データ 148img_itr_validation = idg.flow( 149 train_data, 150 y=train_label, 151 batch_size=16, 152 shuffle=True, 153 subset='validation' 154) 155# テスト用データ 156img_itr_test = idg_test.flow( 157 test_data, 158 y=test_label, 159 batch_size=1, 160) 161 162 163# ---------------------------------- 164# DenseNet121のモデルを構築 165# ---------------------------------- 166# DenseNet121のモデルをロード 167densenet121 = DenseNet121(weights=None, include_top=False, input_shape=(277, 277, 3)) # 適切に変更 168# モデルの構築 169model = build_model(densenet121) 170model.compile( 171 loss='binary_crossentropy', 172 optimizer=Adam(lr=1e-4), 173 metrics=['accuracy'] 174) 175# model.summary() 176 177 178# ---------------------------------- 179# モデルの学習 180# ---------------------------------- 181# コールバックの設定 182es_cb = EarlyStopping(monitor='loss', min_delta=1e-4, patience=1, verbose=1, mode='auto') 183history = model.fit_generator( 184 img_itr_train, 185 steps_per_epoch=math.ceil(train_data.shape[0]/batch_size), 186 epochs=epochs 187# batch_size=batch_size, 188# epochs=epochs, 189# validation_split=0.2, 190# steps_per_epoch=math.ceil(img_itr_train.n/batch_size), 191# epochs=epochs, 192# validation_data=img_itr_validation, 193# validation_steps=math.ceil(img_itr_validation.n/test_batch_size) 194# # callbacks=[es_cb] 195 ) 196 197 198# ------------------------------------ 199# 学習の様子を可視化 200# ------------------------------------ 201#show_train_history(history, epochs) 202 203# ---------------------------------------- 204# テスト画像での精度評価 205# ---------------------------------------- 206print('test data') 207true_label, pred_label = test_img_prediction(img_itr_test, 1) 208print(true_label, pred_label) 209show_report(true_label, pred_label) 210

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

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

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

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

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

aokikenichi

2021/01/10 05:11

Python ROC あたりで検索すると多数コード付きの記事が出てきますがそれらを調べた上でのご質問でしょうか であれば、どの記事を参考にして、同トライしたが、エラーが出たり想定通りのアウトプットとなっていないなどの情報を追記いただけると適した回答が得られやすくなります。
guest

回答1

0

https://teratail.com/questions/179006
このページが役立ちそうです。

投稿2021/01/11 04:00

Kenta_py

総合スコア132

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問