TwoMoons 2DNN(Dense2層ニューラルネットワーク) TensorFlow, Keras
機械学習ディープラーニング・シャローラーニング ベストプラクティス
TensorFlow, Keras, LightGBM の教科書
左の図はTwoMoons 2DNN(Dense2層ニューラルネットワーク)(中間層1層)の出力図です。
分類問題はシャローラーニングでもできますが,ニューラルネットワークの出力図はそれらに比べて圧倒的に滑らかです。
かなり高次の曲線のようにも見えますが,ノード数は,2-3-2 でありパラメータ数は,17です。
この図は,フロムスクラッチで作ったものとまったく同じ図になっています。
(2023-11-25 Python3.10.9(GPUマシン)で動作確認済み)
model.summary()によって2DNNの構造が表示されています。2-3-2 の構成と合わせてパラメータ数を数えることができます。このニューラルネットワークのパラメータ数は,17です。
パラメータ数の数え方の法則は別記事で紹介します。
出力の決定境界図を見てもらえば判るが,3層か4層にすれば LightGBM はニューラルネットワークにかなわないと思います。ましてや scikit-learn にあるシャローラーニングでは勝負になりません。ただ言語系の機械学習マシーンラーニングでは軽さが重要なので出番はあります。
TensorFlow はニューラルネットワークの構築の方法の一つですが,その手続きはかなり複雑です。代わりに複雑な構造のネットワークも組めるのですが,ベテランでも必要性を感じません。
Keras は TensorFlow のラッパーライブラリであり,ニューラルネットワークの構築がその構造の見た目のままに書ける特徴があります。詳細はコードを読むと判ります。層が増えていけばそのありがたみが判ります。
本プラグラムでは学習の評価に単純なホールドアウト法を使っており,データの分け方も定型的です。ホールドアウト法のデメリットはtrainに使えるデータが減ってしまうことですが,Toy Dataですから問題になりません。
また出力図の描画プログラムも定型的であり,典型例です。応用が多いと思われます。
下の枠に添付のhtmlファイルは「Jupyter Notebook」の.ipynbファイルをhtml化したものでそれぞれのファイルは左上隅からダウンロードできます。