前提・実現したいこと
ニューラルネットワークで学習を行った際の
損失関数と正解率を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は
このコードの通りになっています。
回答1件
あなたの回答
tips
プレビュー