学習モードと推論モードの切り替え

DropoutやBatch Normalizationなどで用いられるモードの切り替え

推論モードへの切り替え方法です。 Dropout Batch Normalization , やいくつかの他の確率的な手法は推論モードと学習モードを持ちます。
例えば学習の後に予測を行うとき、Dropoutは使うべきではありません。

Required Libraries

  • numpy 1.12.1
In [1]:
import numpy as np
import renom as rm

推論モードとは何か?

深層学習で使用される関数の中には学習時と推論時で異なる振る舞いをするものがあります。例えばドロップアウトやバッチ正規化関数がそれに当たります。

具体的にドロップアウト関数は学習時、ランダムにデータの一部を0に落とします。推論時はそのような処理は行われません。

そのためモデルを推論モードで実行するか、学習モードで実行するかをユーザが意識して切り替える必要があります。

モードの切り替え方

ReNomには推論モードをオンにするためのフラグがあります。

下記のコードのようにモデルオブジェクトの持つset_modelsメソッドに*inference=True*を与えることで、推論モードに切り替わります。逆に*inference=False*を与えることですることで学習モードに切り替わります。

In [2]:
x = np.random.rand(2, 3)
model = rm.Sequential([
    rm.Dropout(dropout_ratio=0.5),
])

model.set_models(inference=False)
# If Model is set to the "training mode",
# then the Dropout function drops some of the data.
print("Training mode. Some data are dropped.")
print(model(x))
print()

model.set_models(inference=True)
#  If Model is set to the "inference mode",
#  then the Dropout function doesn't drop part of data.
print("Inference mode. Any data are not dropped.")
print(model(x))
Training mode. Some data are dropped.
[[ 0.          0.15597625  1.60988951]
 [ 0.          0.52721781  0.62134868]]

Inference mode. Any data are not dropped.
[[ 0.43925468  0.07798813  0.80494478]
 [ 0.34552573  0.26360891  0.31067435]]