Commit 79176a19 authored by miaecle's avatar miaecle
Browse files

refining DTNN

parent c08d9e1d
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -10,7 +10,6 @@ from deepchem.models.sklearn_models import SklearnModel
from deepchem.models.xgboost_models import XGBoostModel
from deepchem.models.tf_new_models.multitask_classifier import MultitaskGraphClassifier
from deepchem.models.tf_new_models.multitask_regressor import MultitaskGraphRegressor
from deepchem.models.tf_new_models.DTNN_regressor import DTNNGraphRegressor

from deepchem.models.tf_new_models.support_classifier import SupportGraphClassifier
from deepchem.models.multitask import SingletaskToMultitask
+14 −18
Original line number Diff line number Diff line
@@ -169,6 +169,10 @@ class DTNNGraphTopology(GraphTopology):
    self.n_distance = n_distance
    self.distance_min = distance_min
    self.distance_max = distance_max
    self.step_size = (distance_max - distance_min) / n_distance
    self.steps = np.array(
        [distance_min + i * self.step_size for i in range(n_distance)])
    self.steps = np.expand_dims(self.steps, 0)

    self.atom_number_placeholder = tf.placeholder(
        dtype='int32', shape=(None,), name=self.name + '_atom_number')
@@ -179,9 +183,9 @@ class DTNNGraphTopology(GraphTopology):
    self.atom_membership_placeholder = tf.placeholder(
        dtype='int32', shape=(None,), name=self.name + '_atom_membership')
    self.distance_membership_i_placeholder = tf.placeholder(
        dtype='int32', shape=(None,), name=self.name + '_distance_membership')
        dtype='int32', shape=(None,), name=self.name + '_distance_membership_i')
    self.distance_membership_j_placeholder = tf.placeholder(
        dtype='int32', shape=(None,), name=self.name + '_distance_membership')
        dtype='int32', shape=(None,), name=self.name + '_distance_membership_j')

    # Define the list of tensors to be used as topology
    self.topology = [
@@ -222,19 +226,17 @@ class DTNNGraphTopology(GraphTopology):
            np.power(2 * np.diag(batch[i, :num_atoms[i], :num_atoms[i]]), 1 /
                     2.4)).astype(int) for i in range(len(num_atoms))
    ]

    distance = []
    atom_membership = []
    distance_membership_i = []
    distance_membership_j = []
    start = 0
    for im, molecule in enumerate(atom_number):
      distance_matrix = batch[im, :num_atoms[im], :num_atoms[im]] / np.outer(
          molecule, molecule)
      np.fill_diagonal(distance_matrix, 0)
      distance_matrix = np.expand_dims(distance_matrix.flatten(), 1)
      distance_matrix = self.gauss_expand(distance_matrix, self.n_distance,
                                          self.distance_min, self.distance_max)
      distance.append(distance_matrix)
      distance_matrix = np.outer(
          molecule, molecule) / batch[im, :num_atoms[im], :num_atoms[im]]
      np.fill_diagonal(distance_matrix, -100)
      distance.append(np.expand_dims(distance_matrix.flatten(), 1))
      atom_membership.append([im] * num_atoms[im])
      membership = np.array([np.arange(num_atoms[im])] * num_atoms[im])
      membership_i = membership.flatten(order='F')
@@ -243,7 +245,9 @@ class DTNNGraphTopology(GraphTopology):
      distance_membership_j.append(membership_j + start)
      start = start + num_atoms[im]
    atom_number = np.concatenate(atom_number)
    distance = np.concatenate(distance)
    distance = np.concatenate(distance, 0)
    distance = np.exp(-np.square(distance - self.steps) /
                      (2 * self.step_size**2))
    distance_membership_i = np.concatenate(distance_membership_i)
    distance_membership_j = np.concatenate(distance_membership_j)
    atom_membership = np.concatenate(atom_membership)
@@ -257,14 +261,6 @@ class DTNNGraphTopology(GraphTopology):
    }
    return dict_DTNN

  @staticmethod
  def gauss_expand(distance, n_distance, distance_min, distance_max):
    step_size = (distance_max - distance_min) / n_distance
    steps = np.array([distance_min + i * step_size for i in range(n_distance)])
    steps = np.expand_dims(steps, 0)
    distance_vector = np.exp(-np.square(distance - steps) / (2 * step_size**2))
    return distance_vector


class DAGGraphTopology(GraphTopology):
  """GraphTopology for DAG models
+8 −8
Original line number Diff line number Diff line
@@ -142,14 +142,14 @@ CheckFeaturizer = {
    ('kaggle', 'rf_regression'): [None, 14293],
    ('pdbbind', 'tf_regression'): ['grid', 2052],
    ('pdbbind', 'rf_regression'): ['grid', 2052],
    ('qm7', 'tf_regression_ft'): [None, [23, 23]],
    ('qm7', 'dtnn'): [None, [23, 23]],
    ('qm7b', 'tf_regression_ft'): [None, [23, 23]],
    ('qm7b', 'dtnn'): [None, [23, 23]],
    ('qm8', 'tf_regression_ft'): [None, [26, 26]],
    ('qm8', 'dtnn'): [None, [26, 26]],
    ('qm9', 'tf_regression_ft'): [None, [29, 29]],
    ('qm9', 'dtnn'): [None, [29, 29]]
    ('qm7', 'tf_regression_ft'): ['CoulombMatrix', [23, 23]],
    ('qm7', 'dtnn'): ['CoulombMatrix', [23, 23]],
    ('qm7b', 'tf_regression_ft'): ['CoulombMatrix', [23, 23]],
    ('qm7b', 'dtnn'): ['CoulombMatrix', [23, 23]],
    ('qm8', 'tf_regression_ft'): ['CoulombMatrix', [26, 26]],
    ('qm8', 'dtnn'): ['CoulombMatrix', [26, 26]],
    ('qm9', 'tf_regression_ft'): ['CoulombMatrix', [29, 29]],
    ('qm9', 'dtnn'): ['CoulombMatrix', [29, 29]]
}

CheckSplit = {
+4 −4
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ import deepchem
from deepchem.molnet.load_function.bace_features import bace_user_specified_features


def load_bace_regression(featurizer=None, split='random', reload=True):
def load_bace_regression(featurizer='ECFP', split='random', reload=True):
  """Load bace datasets."""
  # Featurize bace dataset
  print("About to featurize bace dataset.")
@@ -44,7 +44,7 @@ def load_bace_regression(featurizer=None, split='random', reload=True):
    featurizer = deepchem.feat.WeaveFeaturizer()
  elif featurizer == 'Raw':
    featurizer = deepchem.feat.RawFeaturizer()
  elif featurizer == None:
  elif featurizer == 'UserDefined':
    featurizer = deepchem.feat.UserDefinedFeaturizer(
        bace_user_specified_features)

@@ -76,7 +76,7 @@ def load_bace_regression(featurizer=None, split='random', reload=True):
  return bace_tasks, (train, valid, test), transformers


def load_bace_classification(featurizer=None, split='random', reload=True):
def load_bace_classification(featurizer='ECFP', split='random', reload=True):
  """Load bace datasets."""
  # Featurize bace dataset
  print("About to featurize bace dataset.")
@@ -110,7 +110,7 @@ def load_bace_classification(featurizer=None, split='random', reload=True):
    featurizer = deepchem.feat.WeaveFeaturizer()
  elif featurizer == 'Raw':
    featurizer = deepchem.feat.RawFeaturizer()
  elif featurizer == None:
  elif featurizer == 'UserDefined':
    featurizer = deepchem.feat.UserDefinedFeaturizer(
        bace_user_specified_features)

+4 −4
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ import deepchem
import scipy.io


def load_qm7_from_mat(featurizer=None, split='stratified', reload=True):
def load_qm7_from_mat(featurizer='CoulombMatrix', split='stratified', reload=True):
  if "DEEPCHEM_DATA_DIR" in os.environ:
    data_dir = os.environ["DEEPCHEM_DATA_DIR"]
  else:
@@ -57,7 +57,7 @@ def load_qm7_from_mat(featurizer=None, split='stratified', reload=True):
  return qm7_tasks, (train_dataset, valid_dataset, test_dataset), transformers


def load_qm7b_from_mat(featurizer=None, split='stratified', reload=True):
def load_qm7b_from_mat(featurizer='CoulombMatrix', split='stratified', reload=True):
  if "DEEPCHEM_DATA_DIR" in os.environ:
    data_dir = os.environ["DEEPCHEM_DATA_DIR"]
  else:
@@ -100,7 +100,7 @@ def load_qm7b_from_mat(featurizer=None, split='stratified', reload=True):
  return qm7_tasks, (train_dataset, valid_dataset, test_dataset), transformers


def load_qm7(featurizer=None, split='random', reload=True):
def load_qm7(featurizer='CoulombMatrix', split='random', reload=True):
  """Load qm7 datasets."""
  # Featurize qm7 dataset
  print("About to featurize qm7 dataset.")
@@ -120,7 +120,7 @@ def load_qm7(featurizer=None, split='random', reload=True):
              data_dir)

  qm7_tasks = ["u0_atom"]
  if featurizer is None:
  if featurizer == 'CoulombMatrix':
    featurizer = deepchem.feat.CoulombMatrixEig(23)
  loader = deepchem.data.SDFLoader(
      tasks=qm7_tasks,
Loading