Esempio n. 1
0
 def __call__(self, model):
     """Run constructor."""
     del model
     n_nodes = self.n_nodes
     n_states = n_nodes - 2
     n_edges = n_nodes * (n_nodes - 1) // 2
     _ = [Categorical([0, 1]) for i in range(n_edges)]
     _ = [
         Categorical([CONV1X1, CONV3X3, MAXPOOL3X3])
         for i in range(n_states)
     ]
Esempio n. 2
0
 def __call__(self, model):
     """Run constructor."""
     del model
     for k, v in self.params:
         if isinstance(v, list) and len(v) == 1 and isinstance(v[0], list):
             _ = Numeric(low=v[0][0], high=v[0][1], name=k)
         elif isinstance(v, list):
             _ = Categorical(choices=v, name=k)
         else:
             raise ValueError(
                 'support categorical and numeric hparams only')
Esempio n. 3
0
    def add_spa_group(self, slot, ent, expansion_range):
        """Create a elastic spatial group from a MBV2 block."""
        max_exp = slot.kwargs['expansion']
        max_width = slot.chn_in * max_exp
        if any([e > max_exp for e in expansion_range]):
            raise ValueError('invalid expansion_range: {} max: {}'.format(
                expansion_range, max_exp))
        num_blocks = len(ent)
        if num_blocks != 8:
            # not tested
            last_conv = self.last_conv
            last_bn = self.last_bn
            dw_conv = ent[0]
            dw_bn = ent[1]
            pw_conv = ent[3]
            pw_bn = ent[4]
        else:
            last_conv = ent[0]
            last_bn = ent[1]
            dw_conv = ent[3]
            dw_bn = ent[4]
            pw_conv = ent[6]
            pw_bn = ent[7]
        if self.rank_fn is None or self.rank_fn == 'none':
            rank_fn = None
        elif self.rank_fn == 'l1_fan_in':
            rank_fn = partial(conv2d_rank_weight_l1norm_fan_in, pw_conv)
        elif self.rank_fn == 'l1_fan_out':
            rank_fn = partial(conv2d_rank_weight_l1norm_fan_out, pw_conv)
        elif self.rank_fn == 'bn_l1':
            rank_fn = partial(batchnorm2d_rank_weight_l1norm, pw_bn)
        else:
            raise ValueError('unsupported rank function')
        g = ElasticSpatialGroup([last_conv, last_bn, dw_conv, dw_bn],
                                [pw_conv],
                                max_width=max_width,
                                rank_fn=rank_fn)
        if self.is_search:

            def on_update_handler(chn_in, param):
                g.set_width(chn_in * param.value())

            param_choice = [e for e in expansion_range]
            _ = Categorical(param_choice,
                            name='spa',
                            on_update=partial(on_update_handler, slot.chn_in))
        self.last_conv = pw_conv
        self.last_bn = pw_bn
        self.spa_group_cnt += 1
Esempio n. 4
0
    def add_seq_group(self, bottleneck, repeat_range):
        """Create a elastic sequential group from MBV2 stage modules."""
        blocks = list(bottleneck)
        max_stage_depth = len(blocks)
        g = ElasticSequentialGroup(*blocks)
        if any([r > max_stage_depth for r in repeat_range]):
            raise ValueError('invalid repeat_range: {} max: {}'.format(
                repeat_range, max_stage_depth))
        if self.is_search:

            def on_update_handler(group, param):
                group.set_depth(param.value())

            _ = Categorical(repeat_range,
                            name='seq',
                            on_update=partial(on_update_handler, g))
Esempio n. 5
0
 def __call__(self, model):
     """Construct search space."""
     del model
     _ = [Categorical(list(range(self.dim))) for _ in range(self.n_params)]
Esempio n. 6
0
 def __init__(self, candidates, arch_param=None):
     if arch_param is None:
         arch_param = Categorical(list(candidates.keys()))
     super().__init__(candidates, arch_param)
     self.last_samples = list(range(len(self.candidates())))