Batch Normalization Layerについて

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

1 个评论

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

请先登录,再进行评论。

 采纳的回答

Kenta
Kenta 2019-10-16

4 个投票

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

6 个评论

ご回答ありがとうございます。
分かりにくい質問文ですみません。
訓練・検証・テストに分けて、検証データの結果を見ながら早期終了をした、そして、そこでの学習器を得た→この認識であっております。
「学習途中に保存しているネットワーク」→checkpointpathを使って保存した学習器を指しています。
早期終了で得た学習器でエラーを返してしまうので、早期終了させて保存した学習器を続きから1エポックだけ学習を再開させて学習を完了させる方法を現在考えています。
この他にも方法がありましたら教えて頂きたいです。
ご返信ありがとうございます。
「学習が完了する前にバッチ正規化層でネットワークを使用することが出来ません。trainNetworkを使用して学習を完了させてください。」
というエラーには遭遇したことがなく、なぜこのようなことが起こるのかわかりません。また調べておきます。
学習過程で学習率を落としていると思うので、少し面倒かもしれませんが、おっしゃる通りの方法でも代替できるかもしれませんね。ただ、
「早期終了させて保存した学習器を続きから1エポックだけ学習を再開させて学習を完了させる」
とありますが、checkpointpathで保存した学習器自体はうまく使用できるのですか?
ご返信ありがとうございます。
学習の再開の際にはエラーが出ず、使用することが出来ました。
semanticseg等のコマンドでセグメンテーションに学習器を利用しようとすると学習を完了させてくださいというエラーが出てきてしまいます。
このリンクの一番下に「ネットワークの学習が終了したら、バッチ正規化層は学習セット全体の平均と分散を計算し、これらを TrainedMean プロパティおよび TrainedVariance プロパティに格納します。」とあるのでこのエラーが出てしまうのだと思っています。
すみません、よろしくお願いします。
リンクの提供、ありがとうございます。なんとなくわかった気もします。
つまり、エポックの途中で切ってしまうと、訓練データ全体の平均・分散が算出できないのでエラーを返してしまうのですかね。
ミニバッチサイズがある程度大きいのであればcheckpointpathのネットワークを拾って
そこから数イテレーションの学習を行う、ということは不要かもしれません。
さらに、1エポック以下だけ学習させるのは少し面倒かもしれませんね。
こちらに似た質問がありましたが、理由はすでに議論されている通りです。
上では 1 エポックだけ 'InitialLearnRate' を小さくして学習させる、というコメントもついています。
お二方ともありがとうございます。
リンク先を見て勉強しようと思います。

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Deep Learning Toolbox 的更多信息

产品

版本

R2018b

提问:

FF
2019-10-15

评论:

FF
2019-10-16

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!