ディープラーニング用にニューラルネットの汎用プログラムを書いた

ロボットの姿勢制御にディープラーニングを用いたいと思って、その手始めに、ニューラルネットワーク(誤差逆伝搬:バックプロパゲーション)の汎用プログラムを一昨日くらいから熱を込めて書いた。

汎用性を重視して、レイヤーの数や、その中でのニューロンの数を柔軟に変えられるようにすると同時に、C++らしいオブジェクト型のプログラムにしようとした。ようやくバグがないような感じになって、排他的論理和を識別させてみたが、結構学習に手間かかる。

細かくウェイトを変える(グラディエント値の0.05ずつ調整)ようにして、100万個のデータを学習させて認識させた。中間層は4個で、Neuron[0]というのが、最後の出力層のニューロンの値だ。バイアスニューロンをつけていないからかもしれない。
printOutput Neuron [ 0 ]
が、順伝搬の出力値だ。

-----------------No.999975------------------
入力データ 1 0 
Layer::printOutput Neuron [ 0 ] => 0.986243
教師出力データ 1 
-----------------No.999976------------------
入力データ 0 1 
Layer::printOutput Neuron [ 0 ] => 0.986272
教師出力データ 1 
-----------------No.999977------------------
入力データ 0 1 
Layer::printOutput Neuron [ 0 ] => 0.986272
教師出力データ 1 
-----------------No.999978------------------
入力データ 1 0 
Layer::printOutput Neuron [ 0 ] => 0.986243
教師出力データ 1 
-----------------No.999979------------------
入力データ 0 0 
Layer::printOutput Neuron [ 0 ] => 0.0137698
教師出力データ 0 
-----------------No.999980------------------
入力データ 0 0 
Layer::printOutput Neuron [ 0 ] => 0.0137697
教師出力データ 0 
-----------------No.999981------------------
入力データ 0 0 
Layer::printOutput Neuron [ 0 ] => 0.0137696
教師出力データ 0 
-----------------No.999982------------------
入力データ 1 0 
Layer::printOutput Neuron [ 0 ] => 0.986243
教師出力データ 1 
-----------------No.999983------------------
入力データ 1 1 
Layer::printOutput Neuron [ 0 ] => 0.0131976
教師出力データ 0 
-----------------No.999984------------------
入力データ 1 0 
Layer::printOutput Neuron [ 0 ] => 0.986243
教師出力データ 1 
-----------------No.999985------------------
入力データ 0 1 
Layer::printOutput Neuron [ 0 ] => 0.986272
教師出力データ 1 
-----------------No.999986------------------
入力データ 0 1 
Layer::printOutput Neuron [ 0 ] => 0.986272
教師出力データ 1 
-----------------No.999987------------------
入力データ 0 1 
Layer::printOutput Neuron [ 0 ] => 0.986272
教師出力データ 1 
-----------------No.999988------------------
入力データ 0 0 
Layer::printOutput Neuron [ 0 ] => 0.01377
教師出力データ 0 
-----------------No.999989------------------
入力データ 1 0 
Layer::printOutput Neuron [ 0 ] => 0.986244
教師出力データ 1 
-----------------No.999990------------------
入力データ 1 1 
Layer::printOutput Neuron [ 0 ] => 0.0131984
教師出力データ 0 
-----------------No.999991------------------
入力データ 0 1 
Layer::printOutput Neuron [ 0 ] => 0.986272
教師出力データ 1 
-----------------No.999992------------------
入力データ 1 0 
Layer::printOutput Neuron [ 0 ] => 0.986244
教師出力データ 1 
-----------------No.999993------------------
入力データ 0 1 
Layer::printOutput Neuron [ 0 ] => 0.986273
教師出力データ 1 
-----------------No.999994------------------
入力データ 0 1 
Layer::printOutput Neuron [ 0 ] => 0.986273
教師出力データ 1 
-----------------No.999995------------------
入力データ 1 1 
Layer::printOutput Neuron [ 0 ] => 0.013199
教師出力データ 0 
-----------------No.999996------------------
入力データ 1 1 
Layer::printOutput Neuron [ 0 ] => 0.0131987
教師出力データ 0 
-----------------No.999997------------------
入力データ 0 0 
Layer::printOutput Neuron [ 0 ] => 0.01377
教師出力データ 0 
-----------------No.999998------------------
入力データ 1 0 
Layer::printOutput Neuron [ 0 ] => 0.986244
教師出力データ 1 
-----------------No.999999------------------
入力データ 1 1 
Layer::printOutput Neuron [ 0 ] => 0.0131984
教師出力データ 0 
-----------------No.1000000------------------
入力データ 1 0 
Layer::printOutput Neuron [ 0 ] => 0.986244
教師出力データ 1 
-