简单dropout代码实现
Posted MarToony|名角
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单dropout代码实现相关的知识,希望对你有一定的参考价值。
主要内容:
简述Dropout的原理与代码实现
一、Dropout的代码实现:
参考文章:https://www.cnblogs.com/xiximayou/p/12720589.html
class Dropout(Layer):
"""A layer that randomly sets a fraction p of the output units of the previous layer
to zero.
Parameters:
-----------
p: float
The probability that unit x is set to zero.
"""
def __init__(self, p=0.2):
self.p = p
self._mask = None
self.input_shape = None
self.n_units = None
self.pass_through = True
self.trainable = True
def forward_pass(self, X, training=True):
c = (1 - self.p)
if training:
self._mask = np.random.uniform(size=X.shape) > self.p
c = self._mask
return X * c
def backward_pass(self, accum_grad):
return accum_grad * self._mask
def output_shape(self):
return self.input_shape
- 使用丢弃法应对过拟合,而丢弃法只在训练模型时使用。
- 【 Pytorch Dropout说明 】训练过程中,根据选中率为P的贝努力分布,随机地使输入tensor对象中的一些值变成0。重要的是,dropout面向每个通道,独立地针对每个通道使用该贝努力分布在前向传播中随机选择元素清零;
同时,训练期间,输出的元素(未被清零的元素)会乘以一个 1 / ( 1 − p ) 1/(1-p) 1/(1−p)的因子实现缩放,这就意味着,对应的测试期间,模型仅计算对应元素在每个层对应参数的梯度值。 - Dropout,是一种用于正则化和防止神经元的共同适应的有效的技术。
以上是关于简单dropout代码实现的主要内容,如果未能解决你的问题,请参考以下文章
神经网络中的损失函数正则化和 Dropout 并手写代码实现
正则化之L1和L2已经dropout的一些理解和pytorch代码实现与效果证明