gpt4 book ai didi

python - 两个 Conv 层之间的 Dropout 和 Batchnormalization

转载 作者:行者123 更新时间:2023-12-01 09:18:36 24 4
gpt4 key购买 nike

model3=models.Sequential()
model3.add(Conv2D(32,
(3,3),padding='same',kernel_regularizer=reg,input_shape=X_train.shape[1:]))
model3.add(BatchNormalization(axis=-1))
model3.add(Activation(activation='relu'))
model3.add(Dropout(0.2))
model3.add(Conv2D(32,(3,3),padding='same',kernel_regularizer=reg))
model3.add(BatchNormalization(axis=-1))
model3.add(Activation(activation='relu'))
model3.add(Dropout(0.2))

我有兴趣知道两个卷积层之间的 dropout 是如何工作的。如果L层中特征图的维度为(m, n_h, n_w, n_c)并且过滤器大小为(f, f, n_c) > 对其进行卷积,在执行卷积之前,我们是否会随机关闭层 Ln_c channel 上的一些单元? MaxPool 层上的 Dropout 很简单。

批量归一化

conv2d_1 (Conv2D)            (None, 32, 32, 32)        896       
_________________________________________________________________
batch_normalization_1 (Batch (None, 32, 32, 32) 128
________________________________________________________________

第三列是该层的参数数量。对于batchnorm层,我们是否标准化批处理中的每个特征图,以便对于每个特征图我们将有4个参数,因此在我的例子中,我有32*4 = 128参数?如果我错了,有人可以纠正我。我认为我的假设是错误的,因为我在某处读到我们在整个 channel 上进行了标准化。但这并没有计算出各层参数的数量。

最佳答案

对于 BatchNormalization 层,如果您阅读其 doc/source code仔细看,它的参数个数取决于以下四个参数:

def build(self, input_shape):
dim = input_shape[self.axis]
if dim is None:
raise ValueError('Axis ' + str(self.axis) + ' of '
'input tensor should have a defined dimension '
'but the layer received an input with shape ' +
str(input_shape) + '.')
self.input_spec = InputSpec(ndim=len(input_shape),
axes={self.axis: dim})
shape = (dim,)

if self.scale:
self.gamma = self.add_weight(shape=shape,
name='gamma',
initializer=self.gamma_initializer,
regularizer=self.gamma_regularizer,
constraint=self.gamma_constraint)
else:
self.gamma = None
if self.center:
self.beta = self.add_weight(shape=shape,
name='beta',
initializer=self.beta_initializer,
regularizer=self.beta_regularizer,
constraint=self.beta_constraint)
else:
self.beta = None
self.moving_mean = self.add_weight(
shape=shape,
name='moving_mean',
initializer=self.moving_mean_initializer,
trainable=False)
self.moving_variance = self.add_weight(
shape=shape,
name='moving_variance',
initializer=self.moving_variance_initializer,
trainable=False)
self.built = True

其中每个变量的形状为 (dim,),在您的情况下为 32。由于有四个变量,因此参数总数为 32x4=128。然而,后两个,即 moving_meanmoving_variance 是不可训练的。

对于Dropout层的使用,我认为在拥有基线模型之前你不需要担心它。有了基线模型后,您可以通过添加额外的 dropout 层来改进它。当然,退出率应该取决于您的任务,您可能必须尝试不同的退出率,看看哪一个最有效。

关于python - 两个 Conv 层之间的 Dropout 和 Batchnormalization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51001996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com