在estimator中同时使用batch_norm和dropout是否相关?

时间:2019-10-05 11:23:44

标签: tensorflow batch-normalization 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)

2 个答案:

答案 0 :(得分:0)

您的理解中有一个小问题。 Batch Normalization的初衷不是要减少过度拟合,而是要加快培训速度。就像在将输入传递到网络的第一层时对输入进行规范化一样,批处理规范化也在内部(或隐藏)层中实现此操作。批量归一化可消除covariate shift在训练期间的影响。

但是,由于将其分别应用于每个批次,因此会导致调整体重参数的副作用。这种正则化效果与您打算解决过度拟合的情况非常相似。

您可以同时应用batch_normdropout,但是建议减少辍学。目前,您的辍学率很高,为0.5。我认为与batch_norm一起应用时,将0.1降为0.2应当足够。另外,dropout的值是一个超参数,因此没有固定的答案,您可能必须根据数据输入和网络对其进行调整。

答案 1 :(得分:0)

batch normalizationdropout都以某种方式提供正则化效果。

在将batch normalization应用于标准化步骤时,它会同时看到mini-batch中的所有训练示例,从而减少了internal covariate shift,这有助于加快训练速度,并且不会将学习率设置得较低并给出正则化效果。

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