MATLAB Answers

FF
1

Batch Normalization Layerについて

Asked by FF
on 15 Oct 2019
Latest activity Commented on by FF
on 16 Oct 2019
MATLABでAIで領域抽出の研究を行っています。
元々学習にとても時間がかかるようなデータ数で学習を行っています。いつもは学習がすべて完了するまで待つのではなく過学習が起こった段階でキャンセルをして止めていました。
今回、Batch Normalization LayerをU-netに追加して学習を行おうと思い学習させ、学習途中に保存しているネットワークでセグメンテーションを行おうとしたのですが
学習が完了する前にバッチ正規化層でネットワークを使用することが出来ません。trainNetworkを使用して学習を完了させてください。
というエラーが出てきました。
学習はいつもmaxEpochsを100にして行っていました。途中で学習を終了させ、ネットワークを使用したい場合普通にキャンセルで止めてもネットワークを使用する事はできますでしょうか?
または、途中に保存しているネットワークをtrainNetworkを使用して学習を完了させる方法を教えて頂きたいです。
よろしくお願いします。

  1 Comment

michio
on 16 Oct 2019
検索用に対応する英語のエラーメッセージを記しておきます。
Unable to use networks with batch normalization layers before training is complete. Use trainNetwork to complete network training.
学習が完了する前に、バッチ正規化層でネットワークを使用することはできません。trainNetwork を使用してネットワークの学習を完了させてください。

Sign in to comment.

Products


Release

R2018b

1 Answer

Answer by Kenta Itakura on 16 Oct 2019
 Accepted Answer

こんにちは。
訓練・検証・テストに分けて、検証データの結果を見ながら早期終了をした、そして、そこでの学習器を得たという認識でこの回答を書いています。
ただ、「学習途中に保存しているネットワークで」とありますが、それは下の方法をすでに試したということでしょうか?その場合は、また異なる方法が必要かもしれません。
上のリンクで、checkpointpathとあります。そのように、関数で指定すれば各エポック後に指定したパスに学習器が保存されます。任意のエポックでの学習器を取り出したいのであればそのようにするのが手軽かと思います。
ただ、早期終了で得た学習器がエラーを返すならこの方法でも同様かもしれません。ひとまず、私がうまく質問者様の内容をくみとれていない気もしますので、また返信いただけると幸いです。

  6 Comments

Kenta Itakura on 16 Oct 2019
リンクの提供、ありがとうございます。なんとなくわかった気もします。
つまり、エポックの途中で切ってしまうと、訓練データ全体の平均・分散が算出できないのでエラーを返してしまうのですかね。
ミニバッチサイズがある程度大きいのであればcheckpointpathのネットワークを拾って
そこから数イテレーションの学習を行う、ということは不要かもしれません。
さらに、1エポック以下だけ学習させるのは少し面倒かもしれませんね。
michio
on 16 Oct 2019
こちらに似た質問がありましたが、理由はすでに議論されている通りです。
上では 1 エポックだけ 'InitialLearnRate' を小さくして学習させる、というコメントもついています。
FF
on 16 Oct 2019
お二方ともありがとうございます。
リンク先を見て勉強しようと思います。

Sign in to comment.