PyTorchでまずは基本的なニューラルネットワークを構成してみよう
PythonのライブラリであるPyTorchを使用して、基本的なニューラルネットワークを作成します。Pythonのバージョンは3系です。PyTorchでニューラルネットワークを構成するには自作のクラスを使用するかライブラリを利用することで作成が可能です。
PyTorchのニューラルネットワークの定義をするには
今回はニューラルネットワークの定義について触れていきます。
ニューラルネットワークの定義を抑えて機械学習をできるようにしていきましょう。
段々と機械学習っぽくなってきました。
どんどんいきましょう。
目次
01. ニューラルネットワークとは
02. nn.Sequentialを使ったニューラルネットワークの定義
03. 自作のクラスを使用したニューラルネットワークの定義
04. まとめ
01. ニューラルネットワークとは
そもそもニューラルネットワークとはなんでしょうか。
簡単にいうと人間の思考回路、脳神経回路を真似たアルゴリズムのことを指します。
中間層を作り活性化関数を使用することで...と言ってもよくわからないですよね。
とりあえず濾過装置をイメージしてみて下さい。
濾過層がたくさんあるじゃないですか。
その濾過層が数学の関数になったイメージです。
最終的には綺麗になった水すなわち結果が得られます。
PyTorchで機械学習を行うにはニューラルネットワークの定義が必須となってきます。
まずはnnパッケージというものを利用したニューラルネットワークの定義について解説していきます。
PyTorchではニューラルネットワークの定義に自作のクラスを使用する方法と、自作のクラスを使用しない方法があります。
しかしどちらでもnnパッケージが必要になってきます。
nn.Sequentialは自作のクラスを使用することなくニューラルネットワークを定義することができるので簡単です。
02. nn.Sequentialを使ったニューラルネットワークの定義
早速PyTorchのnn.Sequentialを使用したニューラルネットワークの定義を行います。
PyTorchのニューラルネットワークの定義では、入力層から出力層にかけて順に層を積み重ねてニューラルネットワークを構築していきます。
nn.Conv2dは画像認識のニューラルネットワークでよく用いられます。
入力に対してフィルタリングを行なってから特徴マップを取得します。
引数には、入力チャネル、出力チャネル、カーネル(フィルタ)サイズを渡します。
*チャネルとは次元を指します。
nn.MaxPool2dでは画像のずれに対してニューラルネットワークに頑健性を保つために使われる層です。
入力を任意のサイズに小さくして画像のずれに対応します。
引数にはカーネルサイズを渡します。
nn.ReLUは近年ニューラルネットワークでよく用いられる活性化関数です。
ニューラルネットワークについて単純化してイメージすると入力した値をそれぞれの層ごとで加工し、決められた出力量で出力するというものです。
03. 自作のクラスを使用したニューラルネットワークの定義
自分で複雑なニューラルネットワークを構築するには、nn.Modueを継承したクラスを自分で定義します。
ニューラルネットワークの層の定義の初期化のために__init__メソッドによって各層の定義を記述していきます。
順伝搬の計算はforwardメソッドに書きます。
forwardに渡すことで自動微分が可能となります。
自作のクラスを使って定義したニューラルネットワークをprint(net)すると二層分しか表示されません。
しかし前の章で定義したネットワークと同じ計算をします。
ネットワークをロードすることができます。
ネットワークをロードすることで定義したネットワークを使用することができます。
GPUのcudaを使用する場合はこのようにします。
GPUのcudaにネットワークの定義を転送する必要があるのでこのようにしてcudaに送ります。
04. まとめ
お疲れ様でした。
ここまで読んでいただきありがとうございました。
まだまだわからないことが多くあると思いますが進めていくにつれて慣れていくはずです。
ニューラルネットワークの定義の基本的なやり方なので押さえておくと今後の機械学習がスムーズになります。
機械学習ではニューラルネットワークの定義が必須となるので今回の内容は覚えておくといいと思います。