2.7 Dropout

ランダムにマスクして順伝搬・逆伝搬を行います。

Code 2.10 Dropoutクラス

class Dropout(Layer):
    input_ndim = 0

    def init(self):
        self.dropout_ratio = self.add_state(0.5)
        self.train = self.add_state(True)

    def forward(self):
        if self.train.d:
            self.mask = np.random.rand(*self.x.d.shape) > self.dropout_ratio.d
            self.y.d = self.x.d * self.mask
        else:
            self.y.d = self.x.d * (1 - self.dropout_ratio.d)

    def backward(self):
        self.x.g = self.y.g * self.mask