Esempio n. 1
0
    def __init__(self,
                 args: TrainArgs,
                 atom_fdim: int = None,
                 bond_fdim: int = None):
        """
        :param args: A :class:`~chemprop.args.TrainArgs` object containing model arguments.
        :param atom_fdim: Atom feature vector dimension.
        :param bond_fdim: Bond feature vector dimension.
        """
        super(MPN, self).__init__()
        self.reaction = args.reaction
        self.reaction_solvent = args.reaction_solvent
        self.atom_fdim = atom_fdim or get_atom_fdim(
            overwrite_default_atom=args.overwrite_default_atom_features,
            is_reaction=(self.reaction or self.reaction_solvent))
        self.bond_fdim = bond_fdim or get_bond_fdim(
            overwrite_default_atom=args.overwrite_default_atom_features,
            overwrite_default_bond=args.overwrite_default_bond_features,
            atom_messages=args.atom_messages,
            is_reaction=(self.reaction or self.reaction_solvent))
        self.features_only = args.features_only
        self.use_input_features = args.use_input_features
        self.device = args.device
        self.atom_descriptors = args.atom_descriptors
        self.overwrite_default_atom_features = args.overwrite_default_atom_features
        self.overwrite_default_bond_features = args.overwrite_default_bond_features

        if self.features_only:
            return

        if not self.reaction_solvent:
            if args.mpn_shared:
                self.encoder = nn.ModuleList(
                    [MPNEncoder(args, self.atom_fdim, self.bond_fdim)] *
                    args.number_of_molecules)
            else:
                self.encoder = nn.ModuleList([
                    MPNEncoder(args, self.atom_fdim, self.bond_fdim)
                    for _ in range(args.number_of_molecules)
                ])
        else:
            self.encoder = MPNEncoder(args, self.atom_fdim, self.bond_fdim)
            # Set separate atom_fdim and bond_fdim for solvent molecules
            self.atom_fdim_solvent = get_atom_fdim(
                overwrite_default_atom=args.overwrite_default_atom_features,
                is_reaction=False)
            self.bond_fdim_solvent = get_bond_fdim(
                overwrite_default_atom=args.overwrite_default_atom_features,
                overwrite_default_bond=args.overwrite_default_bond_features,
                atom_messages=args.atom_messages,
                is_reaction=False)
            self.encoder_solvent = MPNEncoder(args, self.atom_fdim_solvent,
                                              self.bond_fdim_solvent,
                                              args.hidden_size_solvent,
                                              args.bias_solvent,
                                              args.depth_solvent)
Esempio n. 2
0
    def __init__(self,
                 args: TrainArgs,
                 atom_fdim: int = None,
                 bond_fdim: int = None):
        """
        :param args: A :class:`~chemprop.args.TrainArgs` object containing model arguments.
        :param atom_fdim: Atom feature vector dimension.
        :param bond_fdim: Bond feature vector dimension.
        """
        super(MPN, self).__init__()
        self.atom_fdim = atom_fdim or get_atom_fdim()
        self.bond_fdim = bond_fdim or get_bond_fdim(atom_messages=args.atom_messages)

        self.features_only = args.features_only
        self.use_input_features = args.use_input_features
        self.device = args.device
        self.atom_descriptors = args.atom_descriptors

        if self.features_only:
            return

        if args.mpn_shared:
            self.encoder = nn.ModuleList([MPNEncoder(args, self.atom_fdim, self.bond_fdim)] * args.number_of_molecules)
        else:
            self.encoder = nn.ModuleList([MPNEncoder(args, self.atom_fdim, self.bond_fdim)
                                          for _ in range(args.number_of_molecules)])
Esempio n. 3
0
 def __init__(self,
              args: Namespace,
              atom_fdim: int = None,
              bond_fdim: int = None,
              graph_input: bool = False):
     super(MPN, self).__init__()
     self.args = args
     self.atom_fdim = atom_fdim or get_atom_fdim(args)
     self.bond_fdim = bond_fdim or get_bond_fdim(args) + \
                         (not args.atom_messages) * self.atom_fdim # * 2
     self.graph_input = graph_input
     self.encoder = MPNEncoder(self.args, self.atom_fdim, self.bond_fdim)
Esempio n. 4
0
    def __init__(self,
                 args: TrainArgs,
                 atom_fdim: int = None,
                 bond_fdim: int = None):
        """
        Initializes the MPN.

        :param args: Arguments.
        :param atom_fdim: Atom features dimension.
        :param bond_fdim: Bond features dimension.
        """
        super(MPN, self).__init__()
        self.atom_fdim = atom_fdim or get_atom_fdim()
        self.bond_fdim = bond_fdim or get_bond_fdim(atom_messages=args.atom_messages)

        print(get_atom_fdim())
        print(get_bond_fdim(atom_messages=args.atom_messages))

#        self.atom_fdim = 127
#        self.bond_fdim = 12
        self.encoder = MPNEncoder(args, self.atom_fdim, self.bond_fdim)
Esempio n. 5
0
 def __init__(self,
              args: TrainArgs,
              atom_fdim: int = None,
              bond_fdim: int = None):
     """
     :param args: A :class:`~chemprop.args.TrainArgs` object containing model arguments.
     :param atom_fdim: Atom feature vector dimension.
     :param bond_fdim: Bond feature vector dimension.
     """
     super(MPN, self).__init__()
     self.atom_fdim = atom_fdim or get_atom_fdim()
     self.bond_fdim = bond_fdim or get_bond_fdim(
         atom_messages=args.atom_messages)
     self.encoder = MPNEncoder(args, self.atom_fdim, self.bond_fdim)
Esempio n. 6
0
 def __init__(self,
              args: Namespace,
              atom_fdim: int = None,
              bond_fdim: int = None,
              graph_input: bool = False,
              params: Dict[str, nn.Parameter] = None):
     super(MPN, self).__init__()
     self.args = args
     self.atom_fdim = atom_fdim or get_atom_fdim(args)
     self.bond_fdim = bond_fdim or get_bond_fdim(
         args) + (not args.atom_messages) * self.atom_fdim
     self.graph_input = graph_input
     self.encoder = MPNEncoder(self.args,
                               self.atom_fdim,
                               self.bond_fdim,
                               params=params)
    def __init__(self,
                 args: Namespace,
                 atom_fdim: int = None,
                 bond_fdim: int = None,
                 graph_input: bool = False):
        """
        Initializes the MPN.

        :param args: Arguments.
        :param atom_fdim: Atom features dimension.
        :param bond_fdim: Bond features dimension.
        :param graph_input: If true, expects BatchMolGraph as input. Otherwise expects a list of smiles strings as input.
        """
        super(MPN, self).__init__()
        self.args = args
        self.atom_fdim = atom_fdim or get_atom_fdim(args)
        self.bond_fdim = bond_fdim or get_bond_fdim(args) + (not args.atom_messages) * self.atom_fdim
        self.graph_input = graph_input
        self.encoder = MPNEncoder(self.args, self.atom_fdim, self.bond_fdim)
Esempio n. 8
0
    def __init__(self, args: Namespace, smiles: List[str]):
        self.substructure_sizes = args.bert_substructure_sizes
        self.vocab_func = partial(atom_vocab,
                                  vocab_func=args.bert_vocab_func,
                                  substructure_sizes=self.substructure_sizes,
                                  args=args)

        if args.bert_vocab_func == 'feature_vector':
            self.unk = None
            self.output_size = get_atom_fdim(args, is_output=True)
            return  # don't need a real vocab list here

        self.unk = 'unk'
        self.smiles = smiles
        self.vocab = get_vocab(args, self.vocab_func, self.smiles)
        self.vocab.add(self.unk)
        self.vocab_size = len(self.vocab)
        self.vocab_mapping = {
            word: i
            for i, word in enumerate(sorted(self.vocab))
        }
        self.output_size = self.vocab_size