【初めて使う人向け】Chainerでニューラルネットを学習する手順を整理してみた

概要 Preferred Networks社が提供する深層学習ツールである chainerを使ってニューラルネットワークを学習する手順を整理しました。大きな流れは以下です。 Chainerが使える形にデータを整形する 学習するニューラルネットワークのモデルを定義する その他の学習条件・パラメータをセットし、trainerを構築する 学習を実行し、学習結果を確認する なお、chainer自体は以下のコマンドで簡単にインストールできます。 また、以下のモジュールがimportされているものとします。 Chainerが使える形にデータを整形する 具体的には以下の状態を満たしていることを指します。 データが全てNumpyのArray型になっている データが全て数値(int又はfloat)型になっている データが全て32bit型になっている データが学習データと検証データに分かれている データが説明変数と目的変数に分かれている NumpyのArray型にする 元データがlist型やpandasのDataFrame型になっている場合、np.arrayのコマンドを使ってarray型に変更しましょう。 全て数値(int又はfloat)型にする 文字列データが混じっている場合は数値にエンコードしておきましょう。以下ではDataFrameの1列目が文字列データだったとして、数値データにエンコードするスクリプトを示しています。 scikit-learnのpreprocessingについては以下記事も参考にしてみてください。 http://own-search-and-study.xyz/2016/11/23/sklearn%E3%81%AEpreprocessing%E3%81%AE%E5%85%A8%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E8%A7%A3%E8%AA%AC/ 数値データを32bit型にする どういう仕様か、chainerは64bitのデータ型を扱ってくれません。astypeを使って32bit型に置き換えましょう。 学習データと検証データに分ける 機械学習をする上では基本的な話ですが、学習データと検証データに分けておきましょう。ランダムに分割したかったら、numpy.random.choice等を使えばいいと思います。 説明変数と目的変数に分ける 説明変数の集合(data)と目的変数(target)に分けておきましょう。所謂Scikit-learnのBunch型にしておくと尚いいと思います。DataFrame型をBunch型にする方法については以下記事を参考にしてください。 http://own-search-and-study.xyz/2016/11/30/pandas%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92scikit-learn%E3%81%AE%E5%85%A5%E5%8A%9B%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E5%A4%89%E6%8F%9B2/ 学習するニューラルネットワークのモデルを定義する Chainを継承したクラスを作り、initで構造を、callで計算内容を定義します。以下に例を示します。 その他の学習条件・パラメータをセットし、trainerを構築する 具体的には以下を設定します。 データオブジェクトの作成と抽出オプションの設定 モデルと最適化関数の設定 学習回数の設定とtrainer構築 trainerの構成は以下のイメージです。 データオブジェクトの作成と抽出オプションの設定 まずtuple_datasetを使ってchainerで使えるオブジェクトを作ります。 その後抽出オプションを指定してイテレータ型にします。こうすることで、trainerをrunしたときに自動的にランダムにデータを抽出してバッチ学習がすることができます。(これは便利!) モデルと最適化関数の設定 まず定義したモデルを使う宣言をします。説明変数がクラス型の時はClassifierを指定すると適切に処理されます。 次に最適化関数を指定します。ここではSGDを指定しています。こうすることでrunの度に自動で最適化計算が走ります。さらにこれにモデルを割り当てます。 そして、学習データを割り当てます。 学習回数の設定とtrainer構築 最後に学習回数(epoch)を指定すればtrainer構築完了です。 学習を実行し、学習結果を確認する 以下を実行することで自動的に指定回数の学習が行われます。 またこのとき、extendを指定しておくと、モデルの保存や精度確認等が行えます。 Irisデータで実証 irisのデータを使って検証してみました。実行するとコンソール上に以下のような画面が出力されるはずです。今回の例では学習データと検証データに同じデータを指定しているという条件ですが、50回の学習で精度33%→90%程度まで上昇しており、確かにニューラルネットワークが学習されていることが確認できました。 ソースコードから、MyChainの部分をより細かく設定するだけでディープラーニングにできることはご理解いただけると思います。実に100行足らずであり、内容もとても合理的と思いますので、私的にはchainerはとても使い易いソフトと考えています。 ...
2017年5月26日0 DownloadsDownload