atlab

モノづくりを楽しむ大学生の備忘録。まだまだ初心者です。お手柔らかにお願いします。

C++でニューラルネット(XOR) with Eigen

こんにちは、今回は最近の記事と打って変わってニューラルネットワークについてです。 以前、はじめてのdeep learnigについての記事を書きましたがその続編みたいな記事ですね。

あの記事を書いてから、講義などで人工知能に学んだり、個人的な興味から勉強したりとdeep learningなどを学んでいました。 何かアウトプットをしてみたいと思い、まずはxorでもニューラルネットで組んでみることにしました。

はじめてのdeep Learningではpythonで書かれていましたが、C++を扱えるようになりたかったのでC++で組んでみました。ほとんど初めてのC++だったので少し時間がかかりましたが良い経験になりました。また行列計算を行うためにEigenというライブラリを使用しました。

今回作成したのは、三層ニューラルネットでXORを学習させるといったものです。

実際に、ニューラルネットワークの記述の中身はこちらです。

教師データように論理回路関数をまとめたlogic_circuit.hをダウンロードしていますが、こちらはただ論理回路の役割の関数のため省きます。

今回作製したニューラルネットバッチ処理などの操作はしていない単純な物ですが、行列を用いることにより関数を重ねることで簡単にニューラルネットを組むことができるようなものを作りました。今後はさまざなな手法を取り入れながら発展させて行きたいです。 プログラムは詳しくはこちらをご覧ください。

github.com