Tensorflow 模型通过 Dropout 低估了值

问题描述

我在密集 NN 模型中将 dropout 作为正则化方法实现时遇到问题。似乎将 dropout 值添加到 0 以上只会缩小预测值,在某种程度上让我认为在将单个权重设置为零后某些事情没有被正确考虑。我确定我的实施有误,但我似乎无法弄清楚是什么。

构建此模型的代码直接取自 tensorflow 页面 (https://www.tensorflow.org/tutorials/keras/overfit_and_underfit),但无论我使用何种架构构建模型都会发生。

model = tf.keras.Sequential([
        layers.Dense(512,activation='relu',input_shape=[len(X_train[0])]),layers.Dropout(0.5),layers.Dense(512,activation='relu'),layers.Dense(1)
    ])

任何帮助将不胜感激!

plot generated when using a dropout rate of 0.5 in between layers

解决方法

在添加 Dropout 时降低 training set 中的准确度是完全正常的。您通常这样做是为了权衡提高看不见的数据(测试集)的准确性,从而提高泛化属性。

但是,尝试将 Dropout 率降低到 0.100.20。你会得到更好的结果。此外,除非您要处理数亿个示例,否则请尝试减少神经网络中的神经元,例如从 512 减少到 128。对于复杂的神经网络,反向传播梯度不会达到最佳水平。使用太简单的神经网络,梯度会饱和,也不会学习。

另外一点,您可能希望将 pd.get_dummies 应用到您的输出 (Y) 并将最后一层增加到 Dense(2) 并规范化输入数据。