logo

Julia FluxでMLPを実装して非線形関数を近似する方法 📂機械学習

Julia FluxでMLPを実装して非線形関数を近似する方法

スタート

必要なパッケージをインポートし、近似したい非線形関数を定義しよう。

nonlinear_function.png

学習セットの生成

関数の定義域である$[-5, 5]$から無作為に1024点を選んだ。これらの点はFloat64型だが、ディープラーニングでは一般的にFloat32型を扱うので、変換した。もちろん、モデルにFloat64Int64のデータを入力として用いても、自動的にデータ型を変換し実行するが。

また、各列が1つのデータを意味するため(わかりにくければ、行列の乗算を考えてみて)、1024ベクトルを1x1024マトリクスに変換した。

上で定義した関数$f$でラベルを作り、Flux.DataLoaderで訓練可能にした。

モデルの定義

Chain()によってMLPを作り、関数のグラフを描いてみると、$f$と全く異なることが確認できる。

initial_MLP.png

損失関数とオプティマイザの定義

損失関数はMSEとして、オプティマイザはADAMとした。

トレーニング

これで、@epochs マクロで訓練することができる。5000エポックを繰り返した後、ロスが非常に小さくなったことが確認できる。

MLPのグラフは次のようになる。 trained_MLP.png

コード全文

環境

  • OS: Windows10
  • Version: Julia 1.7.1, Flux 0.12.8