根据Keras文档,dropout层在训练和测试阶段表现不同:
请注意,如果您的模型在训练和测试阶段具有不同的行为(例如,如果它使用了Dropout、BatchNormalization等),则需要向您的函数传递学习阶段标志:
不幸的是,没有人谈论实际的差异。为什么dropout在测试阶段的行为会不同?我希望该层将某些神经元设置为0。为什么这种行为会取决于训练/测试阶段?
根据Keras文档,dropout层在训练和测试阶段表现不同:
请注意,如果您的模型在训练和测试阶段具有不同的行为(例如,如果它使用了Dropout、BatchNormalization等),则需要向您的函数传递学习阶段标志:
不幸的是,没有人谈论实际的差异。为什么dropout在测试阶段的行为会不同?我希望该层将某些神经元设置为0。为什么这种行为会取决于训练/测试阶段?
在训练阶段,使用Dropout来减少过度拟合的机会。正如您所提到的,这个层会停用某些神经元。模型将变得更加不敏感于其它节点的权重。基本上,使用Dropout层后,经过训练的模型将是许多缩减模型的平均值。在这里可以查看更详细的解释。
然而,在应用训练好的模型时,您想要充分利用模型的全部能力。您希望使用训练(平均)网络中的所有神经元,以获得最高的准确性。