a b/model_configuration.py
1
from model_definition.baseline import baseline_config
2
from model_definition.additional_layers import additional_layers_config
3
from model_definition.default import default_config
4
5
6
class ModelConfig(object):
7
    def __init__(self, conv_layers_num, fc_layers_num, config_dict):
8
        self._weights = config_dict['weights']
9
        self._biases = config_dict['biases']
10
        self._fc_layers_with_dropout = []
11
        self._conv_layers_num = conv_layers_num
12
        self._fc_layers_num = fc_layers_num
13
        self._config_dict = config_dict
14
15
    def get_fc_weights(self):
16
        return self._weights[self._conv_layers_num:]
17
18
    def get_fc_biases(self):
19
        return self._biases[self._conv_layers_num:]
20
21
    def get_conv_weights(self):
22
        return self._weights[0:self._conv_layers_num]
23
24
    def get_conv_biases(self):
25
        return self._biases[0:self._conv_layers_num]
26
27
    def get_strides(self):
28
        return self._config_dict['strides']
29
30
    def get_pool_strides(self):
31
        return self._config_dict['pool_strides']
32
33
    def get_pool_windows(self):
34
        return self._config_dict['pool_windows']
35
    
36
    def has_fc_dropout(self, index):
37
        return index in self._fc_layers_with_dropout
38
39
    def has_dropout_after_convolutions(self):
40
        return False
41
42
    def with_l2_norm(self):
43
        return False
44
45
46
class BaselineConfig(ModelConfig):
47
    def __init__(self, conv_layers_num=3, fc_layers_num=2, 
48
                 config_dict=baseline_config):
49
        super(BaselineConfig, self).__init__(conv_layers_num,
50
                                             fc_layers_num,
51
                                             config_dict)
52
53
54
class NoRegularizationConfig(ModelConfig):
55
    def __init__(self, conv_layers_num=4, fc_layers_num=3, 
56
                 config_dict=additional_layers_config):
57
        super(NoRegularizationConfig, self).__init__(
58
            conv_layers_num, fc_layers_num, config_dict)
59
60
61
# Three different regularization options used for
62
# building the network configuration
63
class OneDropoutRegularizationConfig(NoRegularizationConfig):
64
    def __init__(self, conv_layers_num=4, fc_layers_num=3, 
65
                 config_dict=additional_layers_config):
66
        super(OneDropoutRegularizationConfig, self).__init__(
67
            conv_layers_num, fc_layers_num, config_dict)
68
        # Dropout on second fully connected layers, zero based indexing
69
        self._fc_layers_with_dropout = [1]
70
71
72
class DropoutAfterConvolutionsConfig(OneDropoutRegularizationConfig):
73
    def __init__(self, conv_layers_num=4, fc_layers_num=3, 
74
                 config_dict=additional_layers_config):
75
        super(DropoutAfterConvolutionsConfig, self).__init__(
76
            conv_layers_num, fc_layers_num, config_dict)
77
78
    def has_dropout_after_convolutions(self):
79
        return True
80
81
82
class DropoutsWithL2RegularizationConfig(DropoutAfterConvolutionsConfig):
83
    def __init__(self, conv_layers_num=4, fc_layers_num=3, 
84
                 config_dict=additional_layers_config):
85
        super(DropoutsWithL2RegularizationConfig, self).__init__(
86
            conv_layers_num, fc_layers_num, config_dict)
87
88
    def with_l2_norm(self):
89
        return True
90
91
92
# With regularization - 2 dropouts and L2 norm
93
# filters and strides adopted to handle more slices with the same
94
# network depth
95
class DefaultConfig(ModelConfig):
96
    def __init__(self, conv_layers_num=4, fc_layers_num=3, 
97
                 config_dict=default_config):
98
        super(DefaultConfig, self).__init__(conv_layers_num,
99
                                            fc_layers_num,
100
                                            config_dict)
101
        self._fc_layers_with_dropout = [1]
102
103
    def has_dropout_after_convolutions(self):
104
        return True
105
106
    def with_l2_norm(self):
107
        return True