Exemple #1
0
 def _build_gcn(self, fibers):
     # Equivariant layers
     Gblock = []
     fin = fibers['in']
     for i in range(self.num_layers):
         Gblock.append(
             GSE3Res(fin,
                     fibers['mid'],
                     edge_dim=self.edge_dim,
                     div=self.div,
                     n_heads=self.n_heads,
                     learnable_skip=True,
                     skip='cat',
                     selfint=self.si_m,
                     x_ij=self.x_ij))
         Gblock.append(GNormBias(fibers['mid']))
         fin = fibers['mid']
     Gblock.append(
         GSE3Res(fibers['mid'],
                 fibers['out'],
                 edge_dim=self.edge_dim,
                 div=1,
                 n_heads=min(1, 2),
                 learnable_skip=True,
                 skip='cat',
                 selfint=self.si_e,
                 x_ij=self.x_ij))
     return nn.ModuleList(Gblock)
Exemple #2
0
 def _output_layer(self):
     return GSE3Res(self.fibers['mid'],
                    self.fibers['out'],
                    div=1,
                    n_heads=min(self.n_heads, 2),
                    selfint=self.si_e,
                    **self._graph_attention_common_params)
Exemple #3
0
    def _build_gcn(self, fibers, out_dim):
        # Equivariant layers
        Gblock = []
        fin = fibers['in']
        for i in range(self.num_layers):
            Gblock.append(
                GSE3Res(fin,
                        fibers['mid'],
                        edge_dim=self.edge_dim,
                        div=self.div,
                        n_heads=self.n_heads))
            Gblock.append(GNormSE3(fibers['mid']))
            fin = fibers['mid']
        Gblock.append(
            GConvSE3(fibers['mid'],
                     fibers['out'],
                     self_interaction=True,
                     edge_dim=self.edge_dim))

        # Pooling
        if self.pooling == 'avg':
            Gblock.append(GAvgPooling())
        elif self.pooling == 'max':
            Gblock.append(GMaxPooling())

        # FC layers
        FCblock = []
        FCblock.append(
            nn.Linear(self.fibers['out'].n_features,
                      self.fibers['out'].n_features))
        FCblock.append(nn.ReLU(inplace=True))
        FCblock.append(nn.Linear(self.fibers['out'].n_features, out_dim))

        return nn.ModuleList(Gblock), nn.ModuleList(FCblock)
Exemple #4
0
 def _middle_layer(self):
     return GSE3Res(self.fibers['mid'],
                    self.fibers['mid'],
                    div=self.div,
                    n_heads=self.n_heads,
                    selfint=self.si_m,
                    **self._graph_attention_common_params)
Exemple #5
0
    def _build_gcn(self, fibers, out_dim):
        # Equivariant layers
        Gblock = []
        fin = fibers['in']
        for i in range(self.num_layers):
            Gblock.append(
                GSE3Res(fin,
                        fibers['mid'],
                        edge_dim=self.edge_dim,
                        div=self.div,
                        n_heads=self.n_heads))
            Gblock.append(GNormSE3(fibers['mid']))
            fin = fibers['mid']
        Gblock.append(
            GConvSE3(fibers['mid'],
                     fibers['out'],
                     self_interaction=True,
                     edge_dim=self.edge_dim))

        Finblock = []
        Finblock.append(OutEncoder())

        return nn.ModuleList(Gblock), nn.ModuleList(Finblock)