ロボットの姿勢制御にディープラーニングを用いたいと思って、その手始めに、ニューラルネットワーク(誤差逆伝搬:バックプロパゲーション)の汎用プログラムを一昨日くらいから熱を込めて書いた。
汎用性を重視して、レイヤーの数や、その中でのニューロンの数を柔軟に変えられるようにすると同時に、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 -