【问题标题】:Tensorflow Model Underpredicts Values with DropoutTensorflow 模型低估了 Dropout 的值
【发布时间】:2021-07-17 21:57:02
【问题描述】:

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

构建此模型的代码直接取自 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.Dropout(0.5),
        layers.Dense(512, activation='relu'),
        layers.Dropout(0.5),
        layers.Dense(512, activation='relu'),
        layers.Dropout(0.5),
        layers.Dense(1)
    ])

任何帮助将不胜感激!

【问题讨论】:

    标签: python tensorflow dropout


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复!我不确定我是否完全理解。在我看来,我实施 dropout 的方式存在一些问题。正如您所说,我希望为了一般性而牺牲准确性,但我不希望看到我在奇偶校验图中所做的低估值的线性趋势。如果我改为使用 0.20 的 dropout 值,系统性预测不足仍然存在,只是程度较轻,并且无论我选择的其他参数(例如神经元数量等)如何,都会持续存在。
    • 你规范化输入数据了吗?
    • 不,我保留了所有功能。我过去使用过归一化,但发现它对模型的拟合并没有太大的影响,最终只是增加了对新数据点进行预测的额外复杂性。您认为这会导致这个问题吗?
    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2020-05-28
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多