Maxout.__init__()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
dl 0
loc 9
rs 9.6666
c 2
b 0
f 0
1
#!/usr/bin/env python
2
# -*- coding: utf-8 -*-
3
4
import theano.tensor as T
5
from . import NeuralLayer
6
from dense import Dense
7
8
class Maxout(NeuralLayer):
9
    """
10
    Maxout activation unit.
11
     - http://arxiv.org/pdf/1302.4389.pdf
12
    """
13
    def __init__(self, output_dim=None, num_pieces=4, init=None, linear_transform=True):
14
        """
15
        :param num_pieces: pieces of sub maps
16
        """
17
        super(Maxout, self).__init__("maxout")
18
        self.num_pieces = num_pieces
19
        self.output_dim = output_dim
20
        self.linear_transform = linear_transform
21
        self.init = init
22
23
24
    def prepare(self):
25
        if self.output_dim is None:
26
            self.output_dim = self.input_dim // self.num_pieces
27
        if self.linear_transform:
28
            self.transformer = Dense(self.output_dim * self.num_pieces).init(self.input_dim)
29
            self.register(self.transformer)
30
31
32
    def compute_tensor(self, x):
33
        if self.linear_transform:
34
            x = self.transformer.compute_tensor(x)
35
        # x ~ batch, time, size / batch, size
36
        new_shape = [x.shape[i] for i in range(x.ndim - 1)] + [self.output_dim, self.num_pieces]
37
        # new_shape ~ batch, time, out_dim, pieces / batch, out_dim, pieces
38
        output = T.max(x.reshape(new_shape, ndim=x.ndim + 1), axis=x.ndim)
39
        return output