TwoMoons 2DNN(Dense2層ニューラルネットワーク) フロムスクラッチ
機械学習ディープラーニング・シャローラーニング ベストプラクティス
TensorFlow, Keras, LightGBM の教科書
左の図はTwoMoons 2DNN(Dense2層ニューラルネットワーク)(中間層1層)の出力図です。
分類問題はシャローラーニングでもできますが,ニューラルネットワークの出力図はそれらに比べて圧倒的に滑らかです。
かなり高次の曲線のようにも見えますが,ノード数は,2-3-2 でありパラメータ数は,17です。
この図は,TensorFlow, Kerasで作ったものとまったく同じ図になっています。
(2023-11-25 Python3.10.9(GPUマシン)で動作確認済み)
筆者も2DNN(中間層は1層)をフロムスクラッチで作ったことがあります。テーマは同じTwoMoonsです。下に添付の計算グラフはその時に書いたものです。
行列演算をコードにするには,すべて2次元配列にする必要があります。リストは縦ベクトルか横ベクトルにする必要があります。 行列のドット積は,shapeを次のように読み取ればマチガイはしないです。
(a, b)・(b, c) = (a, c)
まず,前の行列の列数と後の行列の行数が一致しなければならないです。そして,それを除けば,結果の行数と列数になります。
誤差逆伝播バックプロパゲーションの計算グラフもつくりました。これも行列の演算になりますが,比較的簡単な演算式になります。
下の枠に添付のhtmlファイルは「Jupyter Notebook」の.ipynbファイルをhtml化したものでそれぞれのファイルは左上隅からダウンロードできます。