2020年9月18日nnモジュールでネットワークをクラス化します。これでいつもチュートリアルで見る形になりますね。EXAMPLES」を進めていきます。Modules」から行なっていきます。documentationこれで、いつもチュートリアルで見ることができる様なネットワークのプログラム構造になりました。目次nnモジュールのクラス化まずは、torchのimportです。torch次に、クラスで2層ニューラルネットワークを定義します。今回作成するクラスは、クラス名「TwoLayerNet」で、torch.nn.Moduleを継承して作成します。xが入力するテンソル。y_predコンストラクタ(初期化関数)で「linear1」と「linear2」を定義しています。メソッドとして、「forward」を定義します。これは順伝播に利用するメソッドになります。プログラムの流れとしては、linear1に入力して、その出力を活性化関数ReLUで変換(実際にはclump(min=0))したものをh_relu変数に格納します。h_reluをlinear2に入力します。その出力値がy_pred変数に格納されて、forwardメソッドからの返り値になります。次に、定義したクラスを利用してニューラルネットワークの訓練を行います。3逆伝播をして、重みの更新を行う。optimizer.step()今回、nnモジュールを継承したクラスでネットワークを作成することで、1順伝播の部分に直接順伝播の計算式を記述する必要がなくなりました。順伝播はクラスのところで記載される様になったので、より抽象的にプログラムを記載できる様になりました。制御と重みの共有についてこの項目は、理解するのに少し時間がかかりました。奇妙なネットワークを実装する、と始まりますので・・・この項目では、ネットワークのモデルの順伝播を定義するときに、Pythonのループ構造や制御文を利用することができますよ、という内容だと理解できます。ループでモジュール(チュートリアルではmiddle_linear)を使い回しても、計算グラフはしっかりとそれぞれで計算されるので大丈夫ですよ、という内容だと理解しました。順伝播の「middle_layer」を0〜3回forループで繰り返します。「middle_layer」をループ回数使い回しています。順伝播を定義するときには、Pythonのループや制御文を利用することができます。ここでは、計算グラフを定義するときに同じモジュールを何度も再利用しても大丈夫なことを示しています。これはLuaTorch(昔のPyTorch)からの改善点で、昔は各モジュールは1回しか使えませんでした。optimizer.step()バリバリ実装し始めたらこのテクも使うのかもしれません。今回のプログラムをGitHubにアップロードしていますので、ご利用ください。EXAMPLES」チュートリアルの一連の記事をリンクします。興味のままにPyTorchのチュートリアルをやってました。GANとかやってたよね。テンソル型など、もう一度復習してしっかりと概念をつかんでおきたいです。PyTorchで見慣れた形のプログラム構成になっていきいます。このチュートリアルはひとつづつPyTorchの機能を適用してくれるからわかりやすいですね。nnパッケージを利用してニューラルネットを構築します。この流れだと、nnパッケージの便利さがよくわかるね。optimモジュールで最適化をわざわざ記載しなくていい様になります。色々な最適化手法も導入できる様になるよ。PyTorchよかったらシェアしてね!URLをコピーしました!URLをコピーしました!パンダの中のパンダサウンドクリエータ、プログラマひたすら脳内の思考と雑念を記事にしている気が・・・ご容赦ください!音楽、プログラム、自分の作品となる何かが作れる日を目指して邁進中です。