前回MyAEというクラスを説明した。
このクラスからオブジェクトを作ると、用意ができる。
# Set data
from sklearn import datasets
iris = datasets.load_iris()
xtrain = iris.data.astype(np.float32)
# Initialize model
model = MyAE()
optimizer = optimizers.SGD()
optimizer.setup(model)
ここまで用意ができたら、ループを回して延々と学習するだけであり、その処理は今までとほとんど同じである。
# Learn
losslist = []
for j in range(5000):
x = Variable(xtrain)
model.cleargrads() # model.zerograds() 非推奨
loss = model(x)
if j%1000 == 999:
print( "%6d %10.6f" % (j, loss.data) )
losslist.append(loss.data) # 誤差をリストに追加
loss.backward()
optimizer.update()
今回は、誤差が徐々に縮まっていくところをグラフ化してみよう。
そのため、modelに学習データを与えて実行(学習)させると、誤差(loss)が帰ってきて、それをリストlossに加えていく。
正確には、loss.dataが誤差である。
これで、誤差がlosslistに溜まっているので、表示し、画像ファイルとしてセーブした。
# 誤差グラフの表示
plt.plot(losslist)
plt.savefig("irisautoencodeloss.png")
plt.show()
誤差がどんどん小さくなっているいることが分かる。
つまり、学習が進むと、入力と出力がどんどん一致していっていることが分かる。
さて、次回は、もっと突っ込んで、ネットワークの内部のデータを調べてみよう。