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

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

新規登録して質問してみよう
ただいま回答率
85.35%
深層学習

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

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

scikit-learn

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

機械学習

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

0回答

971閲覧

CIFAR10のチュートリアルをpytorchでやってみてそれを発展させてクラスごとのconfusion_matrixを作りたい

oinari03

総合スコア59

深層学習

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

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

scikit-learn

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

機械学習

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2020/09/19 11:36

やりたいこと

cifar10のdataseを使ってチュートリアルをもとに精度クラスごとに出すことに成功しました。

それでいて、次にやろうと思っているのは、その各クラスが本当にあっているかを確かめたくてconfusion_matrixでの比較を行いたいと考えています。

いくつか見ていると、sklearnのconfusion_matrics(正解ラベル,予測ラベル)を使うとできるらしいということがわかりました。引数は正解と予測のラベルだということがわかりました。

しかし、実際にpytorchで出した、正解ラベル(list)と予測ラベル(list)をどのようにして出したらいいのかわかりません。

そのほか、以下codeのsklearnのようにデータセットをx,yでスプリットできたらいいのですが,,,やり方がわかりません。

python

1from sklearn import svm, datasets 2from sklearn.model_selection import train_test_split 3from sklearn.metrics import plot_confusion_matrix 4 5iris = datasets.load_iris() 6X = iris.data 7y = iris.target 8class_names = iris.target_names 9 10# Split the data into a training set and a test set 11X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

以下に理想図をのせます(こんな感じになってほしい)

array([[806, 28, 52, 12, 16, 1, 9, 7, 43, 26], [ 47, 832, 4, 4, 1, 0, 18, 1, 15, 78], [ 95, 8, 474, 47, 146, 33, 131, 34, 10, 22], [ 31, 18, 55, 478, 85, 90, 144, 45, 19, 35], [ 43, 4, 37, 37, 686, 5, 115, 64, 5, 4], [ 24, 6, 36, 181, 92, 443, 96, 87, 12, 23], [ 12, 3, 28, 39, 25, 6, 873, 4, 6, 4], [ 45, 12, 18, 30, 87, 20, 23, 732, 5, 28], [137, 43, 9, 9, 13, 0, 8, 2, 752, 27], [ 81, 164, 5, 11, 4, 1, 12, 11, 16, 695]])

イメージ説明

実際のコード+結果

長いので、該当箇所を貼っていきます。(もし、このほかに需要な箇所があればご指摘くだされば添付いたします。)

class_correct = list(0. for i in range(10)) class_total = list(0. for i in range(10)) with torch.no_grad(): for data in testloader: images, labels = data images, labels = images.to(device), labels.to(device) outputs = net(images) _, predicted = torch.max(outputs, 1) # print(classes) c = (predicted == labels).squeeze() for i in range(4): label = labels[i] # print(label) class_correct[label] += c[i].item() # print(class_correct[label]) class_total[label] += 1 for i in range(10): print('Accuracy of %d %5s : %2d %%' % (i,classes[i], 100 * class_correct[i] / class_total[i])) from sklearn.metrics import confusion_matrix from sklearn.metrics import plot_confusion_matrix cm = confusion_matrix(class_correct, class_total) print(cm) disp = plot_confusion_matrix(cm) plt.show()

実行結果

Accuracy of 0 plane : 71 % Accuracy of 1 car : 77 % Accuracy of 2 bird : 29 % Accuracy of 3 cat : 57 % Accuracy of 4 deer : 49 % Accuracy of 5 dog : 30 % Accuracy of 6 frog : 62 % Accuracy of 7 horse : 69 % Accuracy of 8 ship : 72 % Accuracy of 9 truck : 72 % [[0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 0]] --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-24-bfa9f43d16cb> in <module>() 24 cm = confusion_matrix(class_correct, class_total) 25 print(cm) ---> 26 disp = plot_confusion_matrix(cm) 27 plt.show() 28 TypeError: plot_confusion_matrix() missing 2 required positional arguments: 'X' and 'y_true'

最後に

以上のことから、matricsの図を描くためのヒントのようなものでもいただければ助かります。
特に自分のコードにおける予測ラベルと、正解ラベルのセットがどこにあるかが認識できればmatrixがかけるのでは?とかってに思っています。
また、x,yの座標が取得できればそれをもとに図としておこすことができるのではないかと思っています。

ですので、アドバイスを頂ければと思います。

どうかよろしくお願いします

参考url

0. 実際のpytorch-cifar10のチュートリアルのリンクです。コードはほぼ丸パクリで、最後のところを修正しようとしています。

1.pytorch-cifar10からconfusion_matrixまで出している記事。だけど自分のコードのどこを修正すればいいかがわからなかった(絶対参考になるはず)

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問