Commit f4d76863 authored by Bharath Ramsundar's avatar Bharath Ramsundar
Browse files

Changes

parent bf289292
Loading
Loading
Loading
Loading
+25 −3
Original line number Diff line number Diff line
@@ -19,9 +19,27 @@ def remove_missing_entries(dataset):
  feature vectors. Get rid of them.
  """
  for i, (X, y, w, ids) in enumerate(dataset.itershards()):
    available_rows = X.any(axis=1)
    ###########################################
    print("X.shape")
    print(X.shape)
    print("X[:10]")
    print(X[:10])
    print("type(X)")
    print(type(X))
    ###########################################
    #available_rows = X.any(axis=1)
    available_rows = np.any(X)
    ###########################################
    print("type(available_rows)")
    print(type(available_rows))
    ###########################################
    logger.info("Shard %d has %d missing entries." %
                (i, np.count_nonzero(~available_rows)))
                #(i, np.count_nonzero(~available_rows)))
                (i, len(X) - len(available_rows)))
    ##################################################
    print("type(available_rows)")
    print(type(available_rows))
    ##################################################
    X = X[available_rows]
    y = y[available_rows]
    w = w[available_rows]
@@ -61,7 +79,11 @@ def load_hppb(featurizer="ECFP",
  dataset_file = os.path.join(data_dir, "hppb.csv")
  if not os.path.exists(dataset_file):
    logger.info("{} does not exist. Downloading it.".format(dataset_file))
    deepchem.utils.download_url(url=hppb_URL, dest_dir=data_dir)
    ################################################
    print("data_dir")
    print(data_dir)
    ################################################
    deepchem.utils.download_url(url=HPPB_URL, dest_dir=data_dir)

  if featurizer == 'ECFP':
    featurizer = deepchem.feat.CircularFingerprint(size=1024)
+6 −4
Original line number Diff line number Diff line
@@ -21,12 +21,14 @@ Note that PPB dataset labels are transformed using %bound -> log(1 - %bound).

# Running Benchmark
```sh
$ python run_benchmark.py model split dataset
$ python run_benchmark.py
```

- models: {GraphConv, PDNN, RF, SVR}
- splits: {scaffold, random, index}
- dataset: {az_clearance.csv, az_hppb.csv, az_logd.csv}
You can manually edit variables within `run_benchmarks.py` to the following values and fun

- `MODEL`: {GraphConv, RF, SVR}
- `SPLIT`: {scaffold, random, index}
- `DATASET_NAME`: {clearance, hppb}

License
----

examples/adme/__init__.py

deleted100644 → 0
+0 −0

Empty file deleted.

+60 −66
Original line number Diff line number Diff line
# DeepCrystal Technologies 2017 - Patrick Hop
# MIT License - have fun!!

from __future__ import print_function
from __future__ import division
from __future__ import unicode_literals

import os
import numpy as np
np.random.seed(123)
from sklearn.ensemble import RandomForestRegressor
from sklearn import svm

import tensorflow as tf
tf.random.set_seed(123)
import deepchem as dc
from deepchem.models.graph_models import GraphConvModel
from sklearn.ensemble import RandomForestRegressor
from deepchem.models import GraphConvModel

MODEL = "GraphConv"
SPLIT = "scaffold"
DATASET_NAME = "hppb"


BATCH_SIZE = 128
# Set to higher values to get better numbers
MAX_EPOCH = 1
LR = 1e-3
LMBDA = 1e-4


def retrieve_datasets():
  os.system(
      'wget -c %s' %
      'https://s3-us-west-1.amazonaws.com/deep-crystal-california/az_logd.csv')
  os.system(
      'wget -c %s' %
      'https://s3-us-west-1.amazonaws.com/deep-crystal-california/az_hppb.csv')
  os.system(
      'wget -c %s' %
      'https://s3-us-west-1.amazonaws.com/deep-crystal-california/az_clearance.csv'
  )


def load_dataset(dataset_file, featurizer='ECFP', split='index'):
  tasks = ['exp']

  if featurizer == 'ECFP':
    featurizer = dc.feat.CircularFingerprint(size=1024)
  elif featurizer == 'GraphConv':
    featurizer = dc.feat.ConvMolFeaturizer()

  loader = dc.data.CSVLoader(
      tasks=tasks, smiles_field="smiles", featurizer=featurizer)
  dataset = loader.featurize(dataset_file, shard_size=8192)

  transformers = [
      dc.trans.NormalizationTransformer(transform_y=True, dataset=dataset)
  ]
  for transformer in transformers:
    dataset = transformer.transform(dataset)

  splitters = {
      'index': dc.splits.IndexSplitter(),
      'random': dc.splits.RandomSplitter(),
      'scaffold': dc.splits.ScaffoldSplitter()
  }
  splitter = splitters[split]
  train, valid, test = splitter.train_valid_test_split(dataset)
  return tasks, (train, valid, test), transformers


def experiment(dataset_file, method='GraphConv', split='scaffold'):

#def retrieve_datasets():
#  os.system(
#      'wget -c %s' %
#      'https://s3-us-west-1.amazonaws.com/deep-crystal-california/az_logd.csv')
#  os.system(
#      'wget -c %s' %
#      'https://s3-us-west-1.amazonaws.com/deep-crystal-california/az_hppb.csv')
#  os.system(
#      'wget -c %s' %
#      'https://s3-us-west-1.amazonaws.com/deep-crystal-california/az_clearance.csv'
#  )


def load_dataset(dataset_name, featurizer='ECFP', split='index'):
  #tasks = ['exp']

  #if featurizer == 'ECFP':
  #  featurizer = dc.feat.CircularFingerprint(size=1024)
  #elif featurizer == 'GraphConv':
  #  featurizer = dc.feat.ConvMolFeaturizer()

  #loader = dc.data.CSVLoader(
  #    tasks=tasks, smiles_field="smiles", featurizer=featurizer)
  #dataset = loader.featurize(dataset_file, shard_size=8192)
  if dataset_name.lower() == "clearance":
    dataset = dc.molnet.load_clearance(featurizer=featurizer, split=split)
  elif dataset_name.lower() == "hppb":
    dataset = dc.molnet.load_hppb(featurizer=featurizer, split=split)

  #transformers = [
  #    dc.trans.NormalizationTransformer(transform_y=True, dataset=dataset)
  #]
  #for transformer in transformers:
  #  dataset = transformer.transform(dataset)

  #splitters = {
  #    'index': dc.splits.IndexSplitter(),
  #    'random': dc.splits.RandomSplitter(),
  #    'scaffold': dc.splits.ScaffoldSplitter()
  #}
  #splitter = splitters[split]
  #train, valid, test = splitter.train_valid_test_split(dataset)
  #return tasks, (train, valid, test), transformers


def experiment(dataset_name, method='GraphConv', split='scaffold'):
  featurizer = 'ECFP'
  if method == 'GraphConv':
    featurizer = 'GraphConv'
  tasks, datasets, transformers = load_dataset(
      dataset_file, featurizer=featurizer, split=split)
      dataset_name, featurizer=featurizer, split=split)
  train, val, test = datasets

  model = None
@@ -96,18 +94,14 @@ def experiment(dataset_file, method='GraphConv', split='scaffold'):
#======================================================================
# Run Benchmarks {GC-DNN, SVR, RF}
def main():
  print("About to retrieve datasets")
  retrieve_datasets()

  MODEL = "GraphConv"
  SPLIT = "scaffold"
  DATASET = "az_hppb.csv"
  #print("About to retrieve datasets")
  #retrieve_datasets()

  metric = dc.metrics.Metric(dc.metrics.pearson_r2_score, np.mean)

  print("About to build model")
  model, train, val, test, transformers = experiment(
      DATASET, method=MODEL, split=SPLIT)
      DATASET_NAME, method=MODEL, split=SPLIT)
  if MODEL == 'GraphConv':
    print("running GraphConv search")
    best_val_score = 0.0
@@ -122,14 +116,14 @@ def main():
      if latest_val_score > best_val_score:
        best_val_score = latest_val_score
        train_score = latest_train_score
    print((MODEL, SPLIT, DATASET, train_score, best_val_score))
    print((MODEL, SPLIT, DATASET_NAME, train_score, best_val_score))
  else:
    model.fit(train)
    train_score = model.evaluate(train, [metric],
                                 transformers)['mean-pearson_r2_score']
    val_score = model.evaluate(val, [metric],
                               transformers)['mean-pearson_r2_score']
    print((MODEL, SPLIT, DATASET, train_score, val_score))
    print((MODEL, SPLIT, DATASET_NAME, train_score, val_score))


if __name__ == "__main__":