こんにちはー。ピヨ猫でーす。
Neural Network Consoleで転移学習を行う方法を紹介します。
また、Neural Network Consoleのcli.pyを使いプログラムより転移学習をする方法を紹介します。
1.転移学習とは何か?
転移学習は大量のデータで学習した学習済のパラメタを使って、追加の学習を行う手法です。
転移学習を用いることで、少ないデータで精度の高い学習結果を得ることが出来ます。
転移学習のメリット
-既に実績のあるパラメタを利用できるので高い精度が期待できる
- データを大量に集めなくて良い
- データが少ないので短い時間で学習が出来る
2.Neural Network Consoleで転移学習を行う方法
1.大量データで学習を行う
まずは普通に大量データで学習を行います。
2.学習結果を右クリックしポップアップより「Open in EDIT Tab with Weight」を選択する
3.学習済のパラメタが各レイヤーの初期値に設定された状態でネットワークが開く
4.学習済のパラメタ(重み)を使って学習を行う
普通に学習を行います。
↓↓↓ 学習曲線があまり良い例ではないですが・・・、出だしが大量データで学習済の状態から学習がスタートしています。
3.cli.pyコマンドで転移学習を行う方法
1.大量データで学習を行う
まずは普通に大量データで学習を行います。
cli.pyで学習を行うコマンドは以下になります。
cli.pyコマンドによる学習の方法について、詳しくは以下の記事を参照ください。
2.学習済のネットワークから学習済のパラメタファイルを取得する
Neural Network Consoleで学習を行うとresults.nnpという学習済のネットワークが生成されます。
ここから、パラメタファイルを抽出します。
上記コマンドを実行すると-oで指定したディレクトリにテキストのパラメタファイルが生成されます。
2019-06-01 03:00:50,956 [nnabla][INFO]: Initializing CPU extension...
2019-06-01 03:00:51,343 [nnabla][INFO]: use pil for the backend of image utils
2019-06-01 03:00:51,561 [nnabla][Level 99]: Loading parameters...
2019-06-01 03:00:51,963 [nnabla][INFO]: Parameter load (
2019-06-01 03:00:51,965 [nnabla][INFO]: Parameter load (
2019-06-01 03:00:51,965 [nnabla][Level 99]: LSTM/Affine/affine/W
2019-06-01 03:00:52,086 [nnabla][Level 99]: LSTM/Affine/affine/b
2019-06-01 03:00:52,087 [nnabla][Level 99]: LSTM/IGate/affine/W
2019-06-01 03:00:52,197 [nnabla][Level 99]: LSTM/IGate/affine/b
2019-06-01 03:00:52,198 [nnabla][Level 99]: LSTM/FGate/affine/W
2019-06-01 03:00:52,304 [nnabla][Level 99]: LSTM/FGate/affine/b
2019-06-01 03:00:52,305 [nnabla][Level 99]: LSTM/OGate/affine/W
2019-06-01 03:00:52,412 [nnabla][Level 99]: LSTM/OGate/affine/b
2019-06-01 03:00:52,413 [nnabla][Level 99]: Affine/affine/W
2019-06-01 03:00:53,584 [nnabla][Level 99]: Affine/affine/b
2019-06-01 03:00:53,585 [nnabla][Level 99]: Affine_2/affine/W
2019-06-01 03:00:53,586 [nnabla][Level 99]: Affine_2/affine/b
2019-06-01 03:00:53,586 [nnabla][Level 99]: Decode Parameter Completed.
3.学習済のパラメタファイルをh5形式にする
テキストのパラメタファイルをh5形式にしないと再利用が出来ないので、h5形式に纏めます。
※ -iで指定するディレクトリは先ほど作成したテキストのパラメタファイルが格納されたフォルダです。
上記コマンドを実行するとinitial_parameters.h5ファイルが生成されます。
2019-06-01 03:00:53,724 [nnabla][INFO]: Initializing CPU extension...
2019-06-01 03:00:54,026 [nnabla][INFO]: use pil for the backend of image utils
2019-06-01 03:00:54,224 [nnabla][Level 99]: Loading parameters...
2019-06-01 03:00:54,224 [nnabla][Level 99]: LSTM~Affine~affine~W.txt
2019-06-01 03:00:54,277 [nnabla][Level 99]: Affine~affine~W.txt
2019-06-01 03:00:54,810 [nnabla][Level 99]: LSTM~OGate~affine~b.txt
2019-06-01 03:00:54,811 [nnabla][Level 99]: LSTM~Affine~affine~b.txt
2019-06-01 03:00:54,811 [nnabla][Level 99]: LSTM~IGate~affine~b.txt
2019-06-01 03:00:54,812 [nnabla][Level 99]: LSTM~FGate~affine~b.txt
2019-06-01 03:00:54,812 [nnabla][Level 99]: LSTM~OGate~affine~W.txt
2019-06-01 03:00:54,862 [nnabla][Level 99]: Affine~affine~b.txt
2019-06-01 03:00:54,863 [nnabla][Level 99]: LSTM~FGate~affine~W.txt
2019-06-01 03:00:54,912 [nnabla][Level 99]: Affine_2~affine~b.txt
2019-06-01 03:00:54,913 [nnabla][Level 99]: LSTM~IGate~affine~W.txt
2019-06-01 03:00:54,962 [nnabla][Level 99]: Affine_2~affine~W.txt
2019-06-01 03:00:54,963 [nnabla][Level 99]: Saving parameters...
2019-06-01 03:00:54,979 [nnabla][INFO]: Parameter save (.h5): /xxx/initial_parameters.h5
2019-06-01 03:00:54,979 [nnabla][Level 99]: Encode Parameter Completed.
4.学習済のパラメタ(重み)を使って学習を行う
cli.pyで学習を行うコマンドは以下になります。-pに先ほど作成したinitial_parameters.h5を指定することでパラメタが学習済の状態から学習を行うことが出来ます。
4.コマンドで転移学習が出来るメリット
コマンドで転移学習が出来るということはプログラムから転移学習が出来ます。
プログラムから転移学習を行うことが出来ると、学習済のパラメタの精度をどんどん向上させていくことが出来ます。
※ もちろん、プログラムからではなく、手動で繰り返し転移学習を行うこともできますが、繰り返し行う作業を手で行うのはしんどいので、プログラムで繰り返し転移学習を行える様にすると便利です。
それでは、少しでもこの記事がお役にたったら嬉しいです。