Unverified Commit bd74c877 authored by Karl Leswing's avatar Karl Leswing Committed by GitHub
Browse files

Merge pull request #1181 from mlgill/issue1138_mg_remaining_tensor_graph

Issue 1138: Fix DTNNTensorGraph, DAGTensorGraph, PetroskiSuchTensorGraph, MPNNTensorGraph, and TextCNNTensorGraph
parents 305aea94 b9694079
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -17,15 +17,16 @@ from deepchem.models.tensorgraph.IRV import TensorflowMultiTaskIRVClassifier
from deepchem.models.tensorgraph.robust_multitask import RobustMultitaskClassifier
from deepchem.models.tensorgraph.robust_multitask import RobustMultitaskRegressor
from deepchem.models.tensorgraph.progressive_multitask import ProgressiveMultitaskRegressor, ProgressiveMultitaskClassifier
from deepchem.models.tensorgraph.models.graph_models import WeaveModel, DTNNTensorGraph, DAGTensorGraph, GraphConvModel, MPNNTensorGraph
from deepchem.models.tensorgraph.models.graph_models import WeaveModel, DTNNModel, DAGModel, GraphConvModel, MPNNModel
from deepchem.models.tensorgraph.models.symmetry_function_regression import BPSymmetryFunctionRegression, ANIRegression

from deepchem.models.tensorgraph.models.seqtoseq import SeqToSeq
from deepchem.models.tensorgraph.models.gan import GAN, WGAN
from deepchem.models.tensorgraph.models.text_cnn import TextCNNTensorGraph
from deepchem.models.tensorgraph.models.text_cnn import TextCNNModel
from deepchem.models.tensorgraph.sequential import Sequential
from deepchem.models.tensorgraph.models.sequence_dnn import SequenceDNN

#################### Compatibility imports for renamed TensorGraph models. Remove below with DeepChem 3.0. ####################

from deepchem.models.tensorgraph.models.graph_models import WeaveTensorGraph, GraphConvTensorGraph
 No newline at end of file
from deepchem.models.tensorgraph.models.text_cnn import TextCNNTensorGraph
from deepchem.models.tensorgraph.models.graph_models import WeaveTensorGraph, DTNNTensorGraph, DAGTensorGraph, GraphConvTensorGraph, MPNNTensorGraph
+54 −10
Original line number Diff line number Diff line
@@ -194,7 +194,7 @@ class WeaveModel(TensorGraph):
    return out


class DTNNTensorGraph(TensorGraph):
class DTNNModel(TensorGraph):

  def __init__(self,
               n_tasks,
@@ -237,7 +237,7 @@ class DTNNTensorGraph(TensorGraph):
    self.steps = np.expand_dims(self.steps, 0)
    self.output_activation = output_activation
    self.mode = mode
    super(DTNNTensorGraph, self).__init__(**kwargs)
    super(DTNNModel, self).__init__(**kwargs)
    assert self.mode == "regression"
    self.build_graph()

@@ -351,14 +351,14 @@ class DTNNTensorGraph(TensorGraph):
    if transformers != [] and not isinstance(outputs, collections.Sequence):
      raise ValueError(
          "DTNN does not support single tensor output with transformers")
    retval = super(DTNNTensorGraph, self).predict(dataset, outputs=outputs)
    retval = super(DTNNModel, self).predict(dataset, outputs=outputs)
    if not isinstance(outputs, collections.Sequence):
      return retval
    retval = np.concatenate(retval, axis=-1)
    return undo_transforms(retval, transformers)


class DAGTensorGraph(TensorGraph):
class DAGModel(TensorGraph):

  def __init__(self,
               n_tasks,
@@ -390,7 +390,7 @@ class DAGTensorGraph(TensorGraph):
    self.n_graph_feat = n_graph_feat
    self.n_outputs = n_outputs
    self.mode = mode
    super(DAGTensorGraph, self).__init__(**kwargs)
    super(DAGModel, self).__init__(**kwargs)
    self.build_graph()

  def build_graph(self):
@@ -508,7 +508,7 @@ class DAGTensorGraph(TensorGraph):
        yield feed_dict

  def predict_on_generator(self, generator, transformers=[], outputs=None):
    out = super(DAGTensorGraph, self).predict_on_generator(
    out = super(DAGModel, self).predict_on_generator(
        generator, transformers=[], outputs=outputs)
    if outputs is None:
      outputs = self.outputs
@@ -519,7 +519,7 @@ class DAGTensorGraph(TensorGraph):
    return out


class PetroskiSuchTensorGraph(TensorGraph):
class PetroskiSuchModel(TensorGraph):
  """
      Model from Robust Spatial Filtering with Graph Convolutional Neural Networks
      https://arxiv.org/abs/1703.00792
@@ -545,7 +545,7 @@ class PetroskiSuchTensorGraph(TensorGraph):
    self.error_bars = True if 'error_bars' in kwargs and kwargs['error_bars'] else False
    self.dropout = dropout
    kwargs['use_queue'] = False
    super(PetroskiSuchTensorGraph, self).__init__(**kwargs)
    super(PetroskiSuchModel, self).__init__(**kwargs)
    self.build_graph()

  def build_graph(self):
@@ -952,7 +952,7 @@ class GraphConvModel(TensorGraph):
    return y_


class MPNNTensorGraph(TensorGraph):
class MPNNModel(TensorGraph):
  """ Message Passing Neural Network,
      default structures built according to https://arxiv.org/abs/1511.06391 """

@@ -987,7 +987,7 @@ class MPNNTensorGraph(TensorGraph):
    self.T = T
    self.M = M
    self.mode = mode
    super(MPNNTensorGraph, self).__init__(**kwargs)
    super(MPNNModel, self).__init__(**kwargs)
    self.build_graph()

  def build_graph(self):
@@ -1172,3 +1172,47 @@ class WeaveTensorGraph(WeaveModel):
  def __init__(self, *args, **kwargs):

    super(WeaveModel, self).__init__(*args, **kwargs)


class DTNNTensorGraph(DTNNModel):

  warnings.warn(
      TENSORGRAPH_DEPRECATION.format("DTNNTensorGraph", "DTNNModel"),
      FutureWarning)

  def __init__(self, *args, **kwargs):

    super(DTNNModel, self).__init__(*args, **kwargs)


class DAGTensorGraph(DAGModel):

  warnings.warn(
      TENSORGRAPH_DEPRECATION.format("DAGTensorGraph", "DAGModel"),
      FutureWarning)

  def __init__(self, *args, **kwargs):

    super(DAGModel, self).__init__(*args, **kwargs)


class PetroskiSuchTensorGraph(PetroskiSuchModel):

  warnings.warn(
      TENSORGRAPH_DEPRECATION.format("PetroskiSuchTensorGraph",
                                     "PetroskiSuchModel"), FutureWarning)

  def __init__(self, *args, **kwargs):

    super(PetroskiSuchModel, self).__init__(*args, **kwargs)


class MPNNTensorGraph(MPNNModel):

  warnings.warn(
      TENSORGRAPH_DEPRECATION.format("MPNNTensorGraph", "MPNNModel"),
      FutureWarning)

  def __init__(self, *args, **kwargs):

    super(MPNNModel, self).__init__(*args, **kwargs)
+21 −3
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ default_dict = {
}


class TextCNNTensorGraph(TensorGraph):
class TextCNNModel(TensorGraph):
  """ A Convolutional neural network on smiles strings
  Reimplementation of the discriminator module in ORGAN: https://arxiv.org/abs/1705.10843
  Originated from: http://emnlp2014.org/papers/pdf/EMNLP2014181.pdf
@@ -117,7 +117,7 @@ class TextCNNTensorGraph(TensorGraph):
    self.num_filters = num_filters
    self.dropout = dropout
    self.mode = mode
    super(TextCNNTensorGraph, self).__init__(**kwargs)
    super(TextCNNModel, self).__init__(**kwargs)
    self.build_graph()

  @staticmethod
@@ -271,7 +271,7 @@ class TextCNNTensorGraph(TensorGraph):
    return np.array(seq)

  def predict_on_generator(self, generator, transformers=[], outputs=None):
    out = super(TextCNNTensorGraph, self).predict_on_generator(
    out = super(TextCNNModel, self).predict_on_generator(
        generator, transformers=[], outputs=outputs)
    if outputs is None:
      outputs = self.outputs
@@ -280,3 +280,21 @@ class TextCNNTensorGraph(TensorGraph):

    out = undo_transforms(out, transformers)
    return out


#################### Deprecation warnings for renamed TensorGraph models ####################

import warnings

TENSORGRAPH_DEPRECATION = "{} is deprecated and has been renamed to {} and will be removed in DeepChem 3.0."


class TextCNNTensorGraph(TextCNNModel):

  warnings.warn(
      TENSORGRAPH_DEPRECATION.format("TextCNNTensorGraph", "TextCNNModel"),
      FutureWarning)

  def __init__(self, *args, **kwargs):

    super(TextCNNTensorGraph, self).__init__(*args, **kwargs)
+7 −7
Original line number Diff line number Diff line
@@ -540,7 +540,7 @@ class TestOverfit(test_util.TensorFlowTestCase):
    n_tasks = y.shape[1]
    batch_size = 10

    model = dc.models.DTNNTensorGraph(
    model = dc.models.DTNNModel(
        n_tasks,
        n_embedding=20,
        n_distance=100,
@@ -661,7 +661,7 @@ class TestOverfit(test_util.TensorFlowTestCase):
    transformer = dc.trans.DAGTransformer(max_atoms=50)
    dataset = transformer.transform(dataset)

    model = dc.models.DAGTensorGraph(
    model = dc.models.DAGModel(
        n_tasks,
        max_atoms=50,
        n_atom_feat=n_feat,
@@ -777,7 +777,7 @@ class TestOverfit(test_util.TensorFlowTestCase):
    n_atom_feat = 75
    n_pair_feat = 14
    batch_size = 10
    model = dc.models.MPNNTensorGraph(
    model = dc.models.MPNNModel(
        n_tasks,
        n_atom_feat=n_atom_feat,
        n_pair_feat=n_pair_feat,
@@ -811,10 +811,10 @@ class TestOverfit(test_util.TensorFlowTestCase):

    classification_metric = dc.metrics.Metric(dc.metrics.accuracy_score)

    char_dict, length = dc.models.TextCNNTensorGraph.build_char_dict(dataset)
    char_dict, length = dc.models.TextCNNModel.build_char_dict(dataset)
    batch_size = 10

    model = dc.models.TextCNNTensorGraph(
    model = dc.models.TextCNNModel(
        n_tasks,
        char_dict,
        seq_length=length,
@@ -849,10 +849,10 @@ class TestOverfit(test_util.TensorFlowTestCase):
    regression_metric = dc.metrics.Metric(
        dc.metrics.pearson_r2_score, task_averager=np.mean)

    char_dict, length = dc.models.TextCNNTensorGraph.build_char_dict(dataset)
    char_dict, length = dc.models.TextCNNModel.build_char_dict(dataset)
    batch_size = 10

    model = dc.models.TextCNNTensorGraph(
    model = dc.models.TextCNNModel(
        n_tasks,
        char_dict,
        seq_length=length,
+9 −10
Original line number Diff line number Diff line
@@ -223,7 +223,7 @@ def benchmark_classification(train_dataset,
      test_dataset.reshard(reshard_size)
      test_dataset = transformer.transform(test_dataset)

    model = deepchem.models.DAGTensorGraph(
    model = deepchem.models.DAGModel(
        len(tasks),
        max_atoms=max_atoms,
        n_atom_feat=n_features,
@@ -264,10 +264,9 @@ def benchmark_classification(train_dataset,

    all_data = deepchem.data.DiskDataset.merge(
        [train_dataset, valid_dataset, test_dataset])
    char_dict, length = deepchem.models.TextCNNTensorGraph.build_char_dict(
        all_data)
    char_dict, length = deepchem.models.TextCNNModel.build_char_dict(all_data)

    model = deepchem.models.TextCNNTensorGraph(
    model = deepchem.models.TextCNNModel(
        len(tasks),
        char_dict,
        seq_length=length,
@@ -287,7 +286,7 @@ def benchmark_classification(train_dataset,
    T = hyper_parameters['T']
    M = hyper_parameters['M']

    model = deepchem.models.MPNNTensorGraph(
    model = deepchem.models.MPNNModel(
        len(tasks),
        n_atom_feat=n_features[0],
        n_pair_feat=n_features[1],
@@ -524,7 +523,7 @@ def benchmark_regression(train_dataset,
    n_distance = hyper_parameters['n_distance']
    assert len(n_features) == 2, 'DTNN is only applicable to qm datasets'

    model = deepchem.models.DTNNTensorGraph(
    model = deepchem.models.DTNNModel(
        len(tasks),
        n_embedding=n_embedding,
        n_distance=n_distance,
@@ -558,7 +557,7 @@ def benchmark_regression(train_dataset,
      test_dataset.reshard(reshard_size)
      test_dataset = transformer.transform(test_dataset)

    model = deepchem.models.DAGTensorGraph(
    model = deepchem.models.DAGModel(
        len(tasks),
        max_atoms=max_atoms,
        n_atom_feat=n_features,
@@ -597,10 +596,10 @@ def benchmark_regression(train_dataset,
    filter_sizes = hyper_parameters['filter_sizes']
    num_filters = hyper_parameters['num_filters']

    char_dict, length = deepchem.models.TextCNNTensorGraph.build_char_dict(
    char_dict, length = deepchem.models.TextCNNModel.build_char_dict(
        train_dataset)

    model = deepchem.models.TextCNNTensorGraph(
    model = deepchem.models.TextCNNModel(
        len(tasks),
        char_dict,
        seq_length=length,
@@ -660,7 +659,7 @@ def benchmark_regression(train_dataset,
    T = hyper_parameters['T']
    M = hyper_parameters['M']

    model = deepchem.models.MPNNTensorGraph(
    model = deepchem.models.MPNNModel(
        len(tasks),
        n_atom_feat=n_features[0],
        n_pair_feat=n_features[1],
Loading