1

我读到批量归一化和 dropout 是避免神经网络过度拟合的两种不同方法。在以下相同的估计器中使用两者是否相关?

```
  model1 = tf.estimator.DNNClassifier(feature_columns=feature_columns_complex_standardized,
                                    hidden_units=[512,512,512],
                                    optimizer=tf.train.AdamOptimizer(learning_rate=0.001, beta1= 0.9,beta2=0.99, epsilon = 1e-08,use_locking=False),
                                    weight_column=weights,
                                    dropout=0.5,
                                    activation_fn=tf.nn.softmax,
                                    n_classes=10,
                                    label_vocabulary=Action_vocab,
                                    model_dir='./Models9/Action/',
                                    loss_reduction=tf.losses.Reduction.SUM_OVER_BATCH_SIZE,
                                    config=tf.estimator.RunConfig().replace(save_summary_steps=10),
                                    batch_norm=True)

4

2 回答 2

0

两者都batch normalizationdropout某种方式给出正则化效果。

当您应用batch normalization归一化步骤时,它会看到所有训练示例mini-batch一起减少,internal covariate shift这有助于加快训练速度,而不是将学习率设置得很低,并提供正则化效果。

如果batch normalization沿网络使用,则dropout正则化的强度可以降低或下降

于 2019-10-11T05:42:49.983 回答
0

你的理解有一个小问题。Batch Normalization最初的意图不是减少过度拟合,而是加快训练速度。就像您在将输入传递到网络的第一层时如何对其进行标准化一样,批量标准化在内部(或隐藏)层中实现此操作。批量标准化消除了covariate shift训练时的影响。

但是由于这在每个批次中都单独应用,因此会导致对权重参数进行正则化的副作用。这种正则化效果与您打算解决过度拟合的效果非常相似。

您可以同时应用两者batch_normdropout但建议减少辍学。目前,您在 0.5 时的辍学率非常高。我相信当你将它与batch_norm. 此外,dropout 的值是一个超参数,因此没有固定的答案,您可能需要根据您的数据输入和网络对其进行调整。

于 2019-10-08T06:49:22.957 回答