如何使用 chainer.using_config 在 chainer 的 evaluate/predict 进程中停止 F.dropout?

how to use chainer.using_config to stop F.dropout in evaluate/predict process in chainer?

F.dropout只在train中使用,我很困惑如何在其中使用chainer.using_config? 它是如何工作的,chainer 如何知道它是在训练还是在预测?

从 Chainer v2 开始,函数行为由 config 变量控制,根据 official doc

chainer.config.train

Training mode flag. If it is True, Chainer runs in the training mode. Otherwise, it runs in the testing (evaluation) mode. The default value is True.

您可以通过以下两种方式控制此config

1。只需分配值。

chainer.config.train = False
here, code runs in the test mode, and dropout won't drop any unit.
model(x)  
chainer.config.train = True

2。 with using_config(key, value) 符号

如果我们使用上述情况,您可能需要经常设置 TrueFalse,chainer 提供 with using_config(key, value) 符号来简化此设置。

with chainer.using_config('train', False):
    # train config is set to False, thus code runs in the test mode.
    model(x)

# Here, train config is recovered to original value.
...

注意 1:如果您正在使用 trainer 模块,Evaluator 将在 validation/evaluation 期间自动处理这些配置(请参阅 document, or source code)。这意味着 train 配置设置为 False 并且 dropout 在计算验证损失时以评估模式运行。

注2:train配置用于切换"train"模式和"evaluate/validation"。 如果需要"predict"代码,需要单独实现。