crlapi/sl/architectures/mixture_model.py [103:134]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def __init__(self,layers,n_experts_split):
        super().__init__(layers)
        self.n_experts_split=n_experts_split

    def _list_experts(self,layer):
        assert isinstance(layer,MixtureLayer)
        experts_url=[]
        for k,e in enumerate(layer.experts):
            if not isinstance(e,MixtureLayer):
                experts_url.append([k])
            else:
                le=self._list_experts(e)
                for v in le:
                    experts_url.append([k]+v)
        return experts_url


    def _generate_splitting(self,layer,url_to_split):
        idx_split=url_to_split[0]
        gate=copy.deepcopy(layer.gate)
        experts=[]
        for k,e in enumerate(layer.experts):
            if k!=idx_split:
                experts.append(copy.deepcopy(e))
            elif len(url_to_split)>1:
                experts.append(self._generate_splitting(e,url_to_split[1:]))
            else:
                n_experts=[copy.deepcopy(e) for _ in range(self.n_experts_split)]
                n_gate=layer.gate.__class__(layer.gate.input_shape, self.n_experts_split, getattr(layer.gate, 'prepro_fn', None))
                experts.append(MixtureLayer(n_gate,n_experts))

        return MixtureLayer(gate,experts)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



crlapi/sl/architectures/mixture_model.py [164:195]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def __init__(self,layers,n_experts_split):
        super().__init__(layers)
        self.n_experts_split=n_experts_split

    def _list_experts(self,layer):
        assert isinstance(layer,MixtureLayer)
        experts_url=[]
        for k,e in enumerate(layer.experts):
            if not isinstance(e,MixtureLayer):
                experts_url.append([k])
            else:
                le=self._list_experts(e)
                for v in le:
                    experts_url.append([k]+v)
        return experts_url


    def _generate_splitting(self,layer,url_to_split):
        idx_split=url_to_split[0]
        gate=copy.deepcopy(layer.gate)
        experts=[]
        for k,e in enumerate(layer.experts):
            if k!=idx_split:
                experts.append(copy.deepcopy(e))
            elif len(url_to_split)>1:
                experts.append(self._generate_splitting(e,url_to_split[1:]))
            else:
                n_experts=[copy.deepcopy(e) for _ in range(self.n_experts_split)]
                n_gate=layer.gate.__class__(layer.gate.input_shape, self.n_experts_split, getattr(layer.gate, 'prepro_fn', None))
                experts.append(MixtureLayer(n_gate,n_experts))

        return MixtureLayer(gate,experts)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



