現在chainerを用いて分類予測を行うモデルを作成しているのですが、f値をPrintReportで表示することができません。
調べてみてもあまりそれらしいものが出てこないので質問させていただきました。
なお、accuracy, lossは正常に記録されています。
python
1import matplotlib.pyplot as plt 2import load_data 3import load_vector 4import numpy as np 5import chainer 6import chainer.links as L 7import chainer.functions as F 8from chainer import Chain, Variable, datasets, optimizers 9from chainer import report, training 10from chainer.training import extensions 11from chainer import iterators 12from chainer import serializers 13import chainer.cuda 14 15#データの準備(株) 16topix = load_vector.load_vector("topix_100days") #入力データの選択 17x_train, x_test = topix[:2000], topix[2000:] 18 19label = load_data.label(load_data.teacher_dataset("topix.csv"),length=100) #教師データの選択 20t_train, t_test = label[:2000], label[2000:] 21 22train = list(zip(x_train, t_train)) 23test = list(zip(x_test, t_test)) 24 25# #データの準備(果物) 26# fluits, labels = load_vector.load_fluits() 27# x_train, x_test = fluits[:500]+fluits[600:1200], fluits[500:600]+fluits[1200:] 28# t_train, t_test = labels[:500]+labels[600:1200], labels[500:600]+labels[1200:] 29# train = list(zip(x_train, t_train)) 30# test = list(zip(x_test, t_test)) 31 32class CNN(Chain): 33 def __init__(self): 34 super(CNN, self).__init__() 35 with self.init_scope(): 36 self.cn1 = L.Convolution2D(None, 32, ksize=(3,3), pad=(1,1)) 37 self.cn2 = L.Convolution2D(None, 32, ksize=(3,3), pad=(1,1)) 38 self.fc1 = L.Linear(None, 128) 39 self.fc2 = L.Linear(128, 2) 40 41 def __call__(self, x, t=None): 42 h1 = F.max_pooling_2d(F.relu(self.cn1(x)), ksize=4, stride=4) 43 h2 = F.max_pooling_2d(F.relu(self.cn2(h1)), ksize=4, stride=4) 44 h3 = F.dropout(F.relu(self.fc1(h2)),ratio=0.5) 45 return self.fc2(h3) 46 47 48model = CNN() 49net = L.Classifier(model) 50optimizer = optimizers.MomentumSGD(lr=0.001).setup(net) 51 52batchsize = 30 53train_iter = chainer.iterators.SerialIterator(train, batchsize, repeat=True, shuffle=True) 54test_iter = chainer.iterators.SerialIterator(test, batchsize, repeat=False, shuffle=True) 55 56updater = training.StandardUpdater(train_iter, optimizer, device=-1) # device=-1でCPUでの計算実行を指定 57 58epoch = 50 59trainer = training.Trainer(updater, (epoch, 'epoch'), out='result') 60 61# テストデータで評価 62trainer.extend(extensions.Evaluator(test_iter, net, device = -1)) 63 64# 学習を記録 65trainer.extend(extensions.LogReport(trigger=(1, 'epoch'))) 66 67# グラフに描画、保存 68trainer.extend(extensions.PlotReport(['main/loss', 'validation/main/loss'], x_key='epoch', file_name='loss.png')) 69trainer.extend(extensions.PlotReport(['main/f1_score', 'validation/main/f1_score'], x_key='epoch', file_name='f_score.png')) 70trainer.extend(extensions.PlotReport(['main/accuracy', 'validation/main/accuracy'], x_key='epoch', file_name='accuracy.png')) 71trainer.extend(extensions.PrintReport(['epoch', 'main/f1_score', 'main/accuracy','validation/main/f1_score', 'validation/main/accuracy','elapsed_time']), trigger=(1, 'epoch')) 72 73trainer.run()
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー