TIM Labs

Chainer:学習進行状況をグラフ化しよう

| コメント(0) | トラックバック(0)
前回、学習の進行状況をプリント出力できるようにしたのだが、数字の羅列を見るのは面倒なので、グラフとして見えるようにしよう。 そのために、学習ループの中で、リストresultに、[周回数,学習正解率,テスト正解率]を毎回追加するようにした。
# 学習ループ
result = []

for i in range(100000):
    x = Variable(xtrain)
    y = Variable(ytrain)
    model.zerograds()
    loss = model(x,y)		# lossを求める (forward)
    loss.backward()		# 微分(backward)
    optimizer.update()		# 調整
    if i % 100 == 0:
        lck = check(xtrain,trans,model)
        tck = check(xtest,yans,model)
        result.append([i,lck,tck])
        print("%6d   %6.4f   %6.4f" % (i,lck,tck))

lck = check(xtrain,trans,model)
tck = check(xtest,yans,model)
result.append([i,lck,tck])
print("%6d   %6.4f   %6.4f" % (i,lck,tck))
以上で集めたデータを、matplotlibで表示しやすいように分解し、表示するようにした。 グラフの内容をそのままpngのファイルとして出力もした。
# グラフ
import matplotlib.pyplot as plt
ilist = [d[0] for d in result]
lck   = [d[1] for d in result]
tck   = [d[2] for d in result]
plt.plot(ilist,lck,color="blue")
plt.plot(ilist,tck,color="red")
plt.savefig("digits0graph.png")
plt.show()

そして出力された画像がこれである。
digits0graph.png青が学習データでの成功率で、赤がテストデータでの成功率である。
最初、一気に .90位まで上昇し、その後、上昇ペースがどんどんゆっくりになっている。
青と赤の差が乖離誤差と呼ばれ、この差が激しくなると、過学習に陥っているという。
過学習とは、模擬試験には強いのだが本番はダメとか、練習の王者で本番ではメダルが取れないという感じとでも言えばよいだろうか。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/565

コメントする

このブログ記事について

このページは、fujiが2017年2月18日 00:00に書いたブログ記事です。

ひとつ前のブログ記事は「データ解析のための統計モデリング入門 一般化線形モデル(GLM) 読書メモ2」です。

次のブログ記事は「Chainer:学習結果(脳)をsave/loadする前に」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。