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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

機械学習

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

Python

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

Q&A

解決済

1回答

1388閲覧

lossとaccuracyの可視化方法

h_proc

総合スコア68

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

機械学習

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

Python

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

0グッド

0クリップ

投稿2021/12/11 06:54

前提・実現したいこと

ニューラルネットワークで学習を行った際の
損失関数と正解率をmatplotlibを使用して可視化したいです。

発生している問題・エラーメッセージ

学習はできたのですが、どの部分を使用してlossグラフを作成すればよいか分かりません。

該当のソースコード

train

1def train(epoch): 2 t = time.time() 3 model.train() 4 optimizer.zero_grad() 5 output = model(features, adj) 6 #output:学習結果(予測)#labels:正解データ 7 loss_train = F.nll_loss(output[idx_train], labels[idx_train]) 8 acc_train = accuracy(output[idx_train], labels[idx_train]) 9 loss_train.backward() 10 optimizer.step() 11 12 if not args.fastmode: 13 # Evaluate validation set performance separately, 14 # deactivates dropout during validation run. 15 model.eval() 16 output = model(features, adj) 17 18 loss_val = F.nll_loss(output[idx_val], labels[idx_val]) 19 acc_val = accuracy(output[idx_val], labels[idx_val]) 20 print('Epoch: {:04d}'.format(epoch+1), 21 'loss_train: {:.4f}'.format(loss_train.item()), 22 'acc_train: {:.4f}'.format(acc_train.item()), 23 'loss_val: {:.4f}'.format(loss_val.item()), 24 'acc_val: {:.4f}'.format(acc_val.item()), 25 'time: {:.4f}s'.format(time.time() - t)) 26 27def test(): 28 model.eval() 29 output = model(features, adj) 30 loss_test = F.nll_loss(output[idx_test], labels[idx_test]) 31 acc_test = accuracy(output[idx_test], labels[idx_test]) 32 print("Test set results:", 33 "loss= {:.4f}".format(loss_test.item()), 34 "accuracy= {:.4f}".format(acc_test.item()))

試したこと

train関数はこのようになっており、この関数の返り値としてloss_train.item()を指定し、
全エポック数分の返り値を配列に代入しました。
そのあとで、
plt.plot(配列)
としたところ、loss_trainのグラフは書くことができました。
しかし、testの場合は、
trainと同じようにloss_test.item()を返り値として取得しても、1つの値しか受け取らないため、グラフを作成することができません。

よく見るような、trainとtestのlossグラフが一枚で表されるものを作りたいのですが、どうしたらよいのでしょうか?
何かアドバイスを頂けると助かります。
よろしくお願い致します。

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

train,testは
このコードの通りになっています。

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

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

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

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

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

jbpb0

2021/12/11 09:43 編集

> この関数の返り値としてloss_train.item()を指定し、 全エポック数分の返り値を配列に代入 「loss_val.item()」も返して使えばいいのでは? > よく見るような、trainとtestのlossグラフが一枚で表されるもの 「train」と「test」ではなく、「train」と「val」では?
h_proc

2021/12/11 13:33

なるほど、その通りでした。ありがとうございます。
guest

回答1

0

自己解決

質問の追記・修正の依頼
でいただいたコメントにて解決いたしました。

投稿2021/12/11 13:34

h_proc

総合スコア68

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問