Commit e301a24a authored by Joseph Gomes's avatar Joseph Gomes
Browse files

Update gdb7 benchmark to use FitTransformRegressor

parent 1d0f96e0
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -21,8 +21,6 @@ def load_gdb7(featurizer=None, split='random'):
  gdb7_tasks = ["u0_atom"]
  if featurizer is None:
    featurizer = dc.feat.CoulombMatrixEig(23)
  else:
    raise ValueError('Only support Coulomb Matrix featurizer')
  loader = dc.data.SDFLoader(tasks=gdb7_tasks, smiles_field="smiles", 
                             mol_field="mol", featurizer=featurizer)
  dataset = loader.featurize(dataset_file)

examples/gdb7/gdb7_tf.py

deleted100644 → 0
+0 −65
Original line number Diff line number Diff line
"""
Script that trains Tensorflow singletask models on GDB7 dataset.
"""
from __future__ import print_function
from __future__ import division
from __future__ import unicode_literals

import os
import deepchem as dc
import numpy as np
import shutil
from sklearn.kernel_ridge import KernelRidge

np.random.seed(123)

base_dir = "/tmp/gdb7_sklearn"
data_dir = os.path.join(base_dir, "dataset")
model_dir = os.path.join(base_dir, "model")
train_dir = os.path.join(base_dir, "train")
test_dir = os.path.join(base_dir, "test")
if os.path.exists(base_dir):
  shutil.rmtree(base_dir)
os.makedirs(base_dir)

max_num_atoms = 23
featurizers = dc.feat.CoulombMatrix(max_num_atoms)
input_file = "gdb7.sdf"
tasks = ["u0_atom"]
smiles_field = "smiles"
mol_field = "mol"

featurizer = dc.data.SDFLoader(tasks, smiles_field=smiles_field, mol_field=mol_field, featurizer=featurizers)
dataset = featurizer.featurize(input_file, data_dir)
random_splitter = dc.splits.RandomSplitter()
train_dataset, test_dataset = random_splitter.train_test_split(dataset, train_dir, test_dir)
transformers = [dc.trans.NormalizationTransformer(transform_y=True, dataset=train_dataset)]
fit_transformers = [dc.trans.CoulombRandomizationFitTransformer(), dc.trans.NormalizationFitTransformer()]

for transformer in transformers:
    train_dataset = transformer.transform(train_dataset)
for transformer in transformers:
    test_dataset = transformer.transform(test_dataset)

regression_metric = dc.metrics.Metric(dc.metrics.mean_absolute_error, mode="regression")
model = dc.models.tensorflow_models.fcnet.TensorflowMultiTaskFitTransformRegressor(n_tasks=len(tasks), n_features=23, logdir=model_dir,
                                    learning_rate=.001, momentum=.8, batch_size=512,
                                    weight_init_stddevs=[1/np.sqrt(2000),1/np.sqrt(800),1/np.sqrt(800),1/np.sqrt(1000)],
                                    bias_init_consts=[0.,0.,0.,0.], layer_sizes=[2000,800,800,1000], 
                                    dropouts=[0.1,0.1,0.1,0.1], fit_transformers=fit_transformers)

# Fit trained model
model.fit(train_dataset, nb_epoch=10)
model.save()

train_evaluator = dc.utils.evaluate.Evaluator(model, train_dataset, transformers)
train_scores = train_evaluator.compute_model_performance([regression_metric])

print("Train scores [kcal/mol]")
print(train_scores)

test_evaluator = dc.utils.evaluate.Evaluator(model, test_dataset, transformers)
test_scores = test_evaluator.compute_model_performance([regression_metric])

print("Validation scores [kcal/mol]")
print(test_scores)
+4 −3
Original line number Diff line number Diff line
@@ -12,17 +12,18 @@ from gdb7_datasets import load_gdb7

np.random.seed(123)

gdb7_tasks, datasets, transformers = load_gdb7()
gdb7_tasks, datasets, transformers = load_gdb7(featurizer=dc.feat.CoulombMatrix(23))
train_dataset, valid_dataset, test_dataset = datasets
fit_transformers = [dc.trans.CoulombRandomizationFitTransformer(), dc.trans.NormalizationFitTransformer()]

regression_metric = dc.metrics.Metric(dc.metrics.mean_absolute_error, 
                                      mode="regression")
model = dc.models.TensorflowMultiTaskRegressor(
model = dc.models.TensorflowMultiTaskFitTransformRegressor(
    n_tasks=len(gdb7_tasks), n_features=23,
    learning_rate=.0002, momentum=.8, batch_size=512,
    weight_init_stddevs=[1/np.sqrt(2000),1/np.sqrt(800),1/np.sqrt(800),1/np.sqrt(1000)],
    bias_init_consts=[0.,0.,0.,0.], layer_sizes=[2000,800,800,1000], 
    dropouts=[0.1,0.1,0.1,0.1], seed=123)
    dropouts=[0.1,0.1,0.1,0.1], fit_transformers=fit_transformers, seed=123)

# Fit trained model
model.fit(train_dataset, nb_epoch=50)