Randomly set a fraction of `p` inputs to 0 at each training update.
| 108 | |
| 109 | |
| 110 | class Dropout(Layer, PhaseMixin): |
| 111 | """Randomly set a fraction of `p` inputs to 0 at each training update.""" |
| 112 | |
| 113 | def __init__(self, p=0.1): |
| 114 | self.p = p |
| 115 | self._mask = None |
| 116 | |
| 117 | def forward_pass(self, X): |
| 118 | assert self.p > 0 |
| 119 | if self.is_training: |
| 120 | self._mask = np.random.uniform(size=X.shape) > self.p |
| 121 | y = X * self._mask |
| 122 | else: |
| 123 | y = X * (1.0 - self.p) |
| 124 | |
| 125 | return y |
| 126 | |
| 127 | def backward_pass(self, delta): |
| 128 | return delta * self._mask |
| 129 | |
| 130 | def shape(self, x_shape): |
| 131 | return x_shape |
| 132 | |
| 133 | |
| 134 | class TimeStepSlicer(Layer): |
no outgoing calls