今回は人工知能のお勉強として、Tensorflowからchainerに戻って、多層パーセプトロンを作る。
で、そいつに3桁の足し算をさせてみようと。
でもって、お勉強した後には問題を出して、解けるかどうかチャレンジしてみようと。
使用環境
ubuntu14.04
python2.7
chainer 1.17.0
まず、インポートは定番もので下記を参照。
モデル保存用にserializersもインポート。
[py] import numpy as np import chainer.functions as F import chainer.links as L from chainer import Variable, optimizers, Chain, serializers [/py]
xと教師ラベルのtには下記を代入する。
[py] x=Variable(np.array([[422,232],[165,499],[777,305],[480,392]],dtype=np.float32)) t=Variable(np.array([[654],[664],[1082],[872]],dtype=np.float32)) [/py]
今回は多層パーセプトロンを作るのだが、多層といってもまず2層で実行してみる。
[py] class TasouModel(Chain): def __init__(self): super(TasouModel, self).__init__( l1=L.Linear(2,3), l2=L.Linear(3,1), ) def __call__(self,x): h = self.l1(x) h2=self.l2(h) return h2 [/py]
で、モデルを読み込んで、
最適化はAdamを採用。
[py] model = TasouModel() optimizer = optimizers.Adam() optimizer.setup(model) [/py]
5000回学習させて、
誤差を出して、逆伝播。
パラメータ値を更新して、
誤差とyのデータを確認する。
ちなみに、誤差が減っていく様子を眺めるのは心地いい。
[py] for i in range(5000): model.zerograds() y=model(x) loss=F.mean_squared_error(y, t) loss.backward() optimizer.update() print "loss",loss.data print "y.data",y.data [/py]
ここまでで問題無ければ、最後にテストで正解を出せるか確認する。
[py] xt=Variable(np.array([[639,256]],dtype=np.float32)) yt=model(xt) print "yt.data",yt.data [/py]
で、実行した結果がこれ。
〜
loss 0.00546533148736
loss 0.00546533148736
loss 0.00546533148736
loss 0.00546533148736
loss 0.00546533148736
y.data [[ 654.13433838]
[ 663.99200439]
[ 1081.94458008]
[ 871.97393799]]
yt.data [[ 895.03637695]]
y.dataがお勉強させていく過程での計算結果。
lossの値が減っているので、当然y.dataも正解になる。
yt.dataがお勉強した数字とは別の値でテストした結果。
出題は639と253を足せってことなので、895は正解。
コードを実際に動かしてみて、正解値が出なければ、もっとお勉強させてみましょう。
10000回とか30000回とか、お好みでどうぞ。
例、下記のカッコの中を変えればいい。
for i in range(10000): //10000回の時
さて、こんな感じで多層パーセプトロンのお勉強をしてみた。
多層パーセプトロン=深層学習(ディープラーニング)なので、その仕組みの基礎がなんとなく理解できたでしょう。
後は、この層をもっと深く重ねていけば、まさしく深層になっていくってこと。
人間が何かを学ぶには、まずシンプルにすれば良し。
全てを削ぎとって、簡潔なコードを学習し、少しずつコードを増やしていく。
深層学習(ディープラーニング)はこのことを教えてくれるんですなあ。