|
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 |