欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

添加 dropout 正则化

程序员文章站 2022-07-13 12:43:03
...

dropout 是神经网络最有效也最常用的正则化方法之一。在训练过程中随机将该层的一些输出特征舍弃(设置为0)。 dropout 比率(dropout rate)是被设为 0 的特征所占的比例,通常在 0.2~0.5范围内。测试时没有单元被舍弃,而该层的输出值需要按 dropout 比率缩小。
例: 假设矩阵layer_output, 其 形 状 为 (batch_size, features)。训练时,我们随机将矩阵中一部分值设为 0。
layer_output *= np.random.randint(0, high=2, size=layer_output.shape) # 训练时,舍弃50%的输出单元
测试时,我们将输出按 dropout 比率缩小。这里我们乘以 0.5(因为前面舍弃了一半的单元)。
layer_output *= 0.5 # 测试时
这样做麻烦,可以将两个运算都在训练时进行,测试时输出保持不变。

layer_output *= np.random.randint(0, high=2, size=layer_output.shape) # 训练时
layer_output /= 0.5 # 注意,是成比例放大而不是成比例缩小
# 向 IMDB 网络中添加 dropout
model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation='sigmoid'))

防止神经网络过拟合的常用方法

  • 获取更多的训练数据
  • 减小网络容量
  • 添加权重正则化
  • 添加 dropout