3』の初学者向け攻略ノートです。『ゼロつく3』の学習の補助となるように適宜解説を加えていきます。本と一緒に読んでください。本で省略されているクラスや関数の内部の処理を1つずつ解説していきます。この記事は、主にステップ43「ニューラルネットワーク」を補足する内容です。DeZeroのモジュール利用して簡単なニューラルネットワークを実装します。参考文献おわりに・簡単なニューラルネットワークの実装DeZeroのモジュールを使って、2層のニューラルネットワークを実装し、勾配降下法によりパラメータを推定します。・実装する前にこの例では、ニューラルネットワークにSigmoid関数を利用します。Sigmoidクラスまたはsigmoid_simple()関数の実装には、指数関数のクラスExpを利用します。functions.pyに実装されているExpとSigmoidを見ると、ステップ52「GPU対応」で登場する内容が含まれています。(それとも既にExpを実装しましたっけ?私が忘れてるだけならお騒がせしました...)先に52.1、52.2、52.4節を読んでcudaモジュールを実装するか、少し手を加える必要があります。cuda.***()とxp.***()を含む行をコメントアウトして(または消して)、xp.をnp.に置き換えた(関数名の部分はそのまま)処理を追加します。これで動作するはずです。次のライブラリを利用します。animationanimationモジュールは、アニメーション(gif画像)を作成するためのモジュールです。最後に推移をアニメーションで確認するのに利用します。これまでに実装済したクラスを利用します。dezeroフォルダの親フォルダまでのパスをsys.path.append()に指定します。\mathbf{y}$を作成します。この例では、入力$x_n$を0から1の一様乱数とします。x_n)$に更に0から1の一様乱数を加えたものとします。1)0から1の一様乱数はnp.random.rand()で生成できます。第1引数に行数、第2引数に列数を指定します。sin関数は、np.sin()で計算できます。円周率$\pi$は、np.piで使えます。作成したデータセットを散布図で確認しておきましょう。グリッド線plt.show()データセット非線形なデータセットになるのを確認できます。・ニューラルネットワークの実装2層のニューラルネットワークを作成して、勾配降下法により学習を行います。入力xと出力yの次元数が1なので、入力層Iと出力層Oの次元数も1です。各層のパラメータを作成します。重みの初期値は、np.random.randn()を使って標準正規分布(平均0・標準偏差1の正規分布)に従う乱数を生成して、そこに0.01を掛けることで標準偏差を0.01に調整します。からっぽのしょこ」を参照してください(ただし、応用的な内容です)。重みとバイアス、損失の推移を確認するために、学習を行う(値を更新する)ごとに値をリストtrace_*に格納していきます。各パラメータの形状によって、値の取り出し方が異なります。2層のニューラルネットワークを関数predict()として作成します。(引数にパラメータを指定できるように変更したのは、アニメーションを作成する際に必要になるためです。不要でしたら本の通りに実装してください。)繰り返し回数をiters、学習率をlrとして値を指定します。損失の計算には平均2乗誤差の関数F.mean_squared_error()を利用します。からっぽのしょこ」を参照してください。loss=0.0942130433323213試行(学習)を繰り返すごとに損失の値が小さくなっています。最後に更新したパラメータを使って損失を確認しておきます。b2))trace_L.append(loss.data.item())print(loss.data)0.093387992868536230に近い値になっていることから、実際の値と予測値との誤差が小さくなっているのが分かります。trace_bとtrace_Lの要素数を合わせるためです。アニメーション作成時に面倒になるので。)・推定結果の確認パラメータの推定値を用いて予測値を計算します。0.86179639]データxの最小値から最大値までを範囲として、作図用の$x$の値を作成します。作成した値ごとに予測値$\hat{y}$を計算します。predict()の第1引数に渡すx_lineを縦に要素を並べた2次元配列に変換しています。出力を1次元配列に変換しています。予測値を散布図と重ねて作図します。グリッド線plt.show()予測値データへの当てはまりのよい曲線を引けています。損失(平均2乗誤差)の推移を確認します。試行回数が増えるにしたがって損失が下がっています。(何だこの不整脈は??)パラメータの推移も確認しておきましょう。・コード(クリックで展開)リストに格納した試行ごとのパラメータの値をNumPy配列に変換した上で、次元ごとにプロットしています。最後に、予測値の曲線の推移をアニメーションで確認します。gif画像を保存nn_anime.save("step43_NeuralNet.gif")itersフレームのアニメーションを作成するのは厳しいので、フレーム数をframe_numとして指定します。除算演算子//は、割り算の整数部分を返します。これを利用して各フレームに対応する結果の回数を割り当てています。predict()に各試行におけるパラメータを指定します。trace_*には1次元配列またはスカラに形状を変えて格納しました。そのため、元の形状に戻す必要があります。試行回数が増えるにしたがって、データへの当てはまりが良くなっていくのを確認できます。これまでに実装してきたパーツを組み合わせて、簡単なニューラルネットワークを組んで学習を行えました。――フレームワーク編』オライリー・ジャパン,2020年.おわりにようやくNNですね。『パターン認識と機械学習』の独学時のまとめです。00:04何かおかしな内容があれば、ご指摘いただけるととても嬉しいです。【R】円周の作図5.3:正射影ベクトルの導出【『スタンフォード線形代数入門』のノート】スポンサーリンクはてなブログをはじめよう!anemptyarchiveさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。