chainerを使ってニューラルネットワークを学習する手順を整理しました。大きな流れは以下です。Chainerが使える形にデータを整形する学習するニューラルネットワークのモデルを定義するその他の学習条件・パラメータをセットし、trainerを構築する学習を実行し、学習結果を確認するなお、chainer自体は以下のコマンドで簡単にインストールできます。chainerまた、以下のモジュールがimportされているものとします。tuple_datasetChainerが使える形にデータを整形する具体的には以下の状態を満たしていることを指します。データが全てNumpyのArray型になっているデータが全て数値(int又はfloat)型になっているデータが全て32bit型になっているデータが学習データと検証データに分かれているデータが説明変数と目的変数に分かれているNumpyのArray型にする元データがlist型やpandasのDataFrame型になっている場合、np.arrayのコマンドを使ってarray型に変更しましょう。np.array(hoge)全て数値(int又はfloat)型にする文字列データが混じっている場合は数値にエンコードしておきましょう。以下ではDataFrameの1列目が文字列データだったとして、数値データにエンコードするスクリプトを示しています。le.transform(df[df.columns[0]])scikit-learnのpreprocessingについては以下記事も参考にしてみてください。数値データを32bit型にするchainerは64bitのデータ型を扱ってくれません。astypeを使って32bit型に置き換えましょう。data.astype(np.int32)学習データと検証データに分ける機械学習をする上では基本的な話ですが、学習データと検証データに分けておきましょう。ランダムに分割したかったら、numpy.random.choice等を使えばいいと思います。説明変数と目的変数に分ける説明変数の集合(data)と目的変数(target)に分けておきましょう。所謂Scikit-learnのBunch型にしておくと尚いいと思います。DataFrame型をBunch型にする方法については以下記事を参考にしてください。PandasのデータフレームをScikit-learnの入力データに変換する方法(2.コーディング)学習するニューラルネットワークのモデルを定義するChainを継承したクラスを作り、initで構造を、callで計算内容を定義します。その他の学習条件・パラメータをセットし、trainerを構築する具体的には以下を設定します。学習回数の設定とtrainer構築trainerの構成は以下のイメージです。データオブジェクトの作成と抽出オプションの設定まずtuple_datasetを使ってchainerで使えるオブジェクトを作ります。target)その後抽出オプションを指定してイテレータ型にします。することで、trainerをrunしたときに自動的にランダムにデータを抽出してバッチ学習がすることができます。repeat=True)モデルと最適化関数の設定まず定義したモデルを使う宣言をします。説明変数がクラス型の時はClassifierを指定すると適切に処理されます。L.Classifier(MyChain())次に最適化関数を指定します。ここではSGDを指定しています。することでrunの度に自動で最適化計算が走ります。これにモデルを割り当てます。optimizers.SGD()optimizer.setup(model)そして、学習データを割り当てます。最後に学習回数(epoch)を指定すればtrainer構築完了です。out='result')学習を実行し、学習結果を確認する以下を実行することで自動的に指定回数の学習が行われます。trainer.run()またこのとき、extendを指定しておくと、モデルの保存や精度確認等が行えます。mode='a'))Irisデータで実証irisのデータを使って検証してみました。実行するとコンソール上に以下のような画面が出力されるはずです。今回の例では学習データと検証データに同じデータを指定しているという条件ですが、50回の学習で精度33%→90%程度まで上昇しており、確かにニューラルネットワークが学習されていることが確認できました。trainer.run()ソースコードから、MyChainの部分をより細かく設定するだけでディープラーニングにできることはご理解いただけると思います。実に100行足らずであり、内容もとても合理的と思いますので、私的にはchainerはとても使い易いソフトと考えています。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。プロフィール兵庫県在住の30代データサイエンティスト。Pythonを使った機械学習等によるデータ分析や、ウェブアプリ等のシステム開発に取り組んでいます。