DropOut法の一体化
前回の続きになります。前回の記事はこちらです。
前回はfor文をごり押しすることで、作業の手間を1/60まで低減できました。
今回は、DropOut のありなしを同時に実行し、手間を半減させることを目指します。
DropOut とは
まず、DropOut とはなにか
過学習の確認に用いられる手法の一つで、入力層及び中間層をランダムに排除することで過学習を起こさせないというものです。
一般的に入力層を0.2、中間層を0.5の割合で排除します。
DropOut ありのとき(in_rate=0.2, mid_rate=0.5)となしのとき(in_rate=0, mid_rate=0)を比較し、なしのほうが精度が良ければ過学習は起きていないと判断できます。
詳しい説明は他にいっぱいあるのでこのへんで。
これまで
これまでは、こんな感じでDropOut 項を設定していました。
#入力層
x_data_rate = enable_dropout * 0.2 #全パーセプトロンのうち,どれだけを無視するのかを設定 0:全部のこす 1:全部無視する
#中間層
layer_1_rate = enable_dropout * 0.5
layer_2_rate = enable_dropout * 0.5
この0.2,0.5をいちいち0,0に変えるのは面倒です。
ちょい簡略化
変数を定義して、コメントをすることで切り替えるようにしました。
#このどちらかをコメントして入力させることでDropoutを切り替え
in_rate=0.0, mid_rate=0.0
in_rate=0.2, mid_rate=0.5
x_data_rate = enable_dropout * in_rate
layer_1_rate = enable_dropout * mid_rate
layer_2_rate = enable_dropout * mid_rate
ちょっと楽になりました。でも、その手間すら惜しい。複数形式はfor文に使えないものか調べました。
for zip形式
まさに求めていたのはこれでした。
in_rt = [0.0,0.2]
mid_rt = [0.0,0.5]
for in_rate, mid_rate in zip(in_rt, mid_rt):
x_data_rate = enable_dropout * in_rate
layer_1_rate = enable_dropout * mid_rate
layer_2_rate = enable_dropout * mid_rate
zipを使うことで対応したペアごとに入力できます。
これで、従来の1/120の労力で解析を回せるようになりました。
for文は4重構造になっています。いいのかわかりませんが。
まとめ
for文すごい!