Commit 85515af4 authored by leswing's avatar leswing
Browse files

Add Tests

parent 48d8d6b5
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -3133,7 +3133,6 @@ class GraphCNNPoolLayer(Layer):

  def create_tensor(self, in_layers=None, set_tensors=True, **kwargs):
    """
    TODO(LESWING) self.num_vertices = 1
    Parameters
    ----------
    in_layers
@@ -3167,7 +3166,10 @@ class GraphCNNPoolLayer(Layer):
                                     A.get_shape()[2].value, self.num_vertices))
    # We do not need the mask because every graph has self.num_vertices vertices now
    # result = make_bn(result, True, mask=None, name="%s_bn" % self.name)
    if set_tensors:
      self.out_tensor = result
    self.out_tensors = [result, result_A, factors]
    return result

  def embedding_factors(self, V, no_filters, name="default"):
    no_features = V.get_shape()[-1].value
@@ -3192,17 +3194,26 @@ class GraphCNNPoolLayer(Layer):
    prob = tf.div(exp, tf.reduce_sum(exp, axis=axis, keep_dims=True))
    return prob

  def none_tensors(self):
    out_tensors, out_tensor = self.out_tensors, self.out_tensor
    self.out_tensors = None
    self.out_tensor = None
    return out_tensors, out_tensor

  def set_tensors(self, tensor):
    self.out_tensors, self.out_tensor = tensor


def GraphCNNPool(num_vertices, **kwargs):
  gcnnpool_layer = GraphCNNPoolLayer(num_vertices, **kwargs)
  return [PassThroughLayer(x, in_layers=gcnnpool_layer) for x in range(3)]


class GraphCNNLayer(Layer):
class GraphCNN(Layer):

  def __init__(self, num_filters, **kwargs):
    self.num_filters = num_filters
    super(GraphCNNLayer, self).__init__(**kwargs)
    super(GraphCNN, self).__init__(**kwargs)

  def create_tensor(self, in_layers=None, set_tensors=True, **kwargs):
    inputs = self._get_input_tensors(in_layers)
@@ -3210,7 +3221,6 @@ class GraphCNNLayer(Layer):
      V, A, mask = inputs
    else:
      V, A = inputs
      mask = None
    no_A = A.get_shape()[2].value
    no_features = V.get_shape()[2].value
    W = tf.get_variable(
+4 −6
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ from deepchem.models.tensorgraph.graph_layers import WeaveLayer, WeaveGather, \
  DAGGather, DTNNExtract, MessagePassing, SetGather
from deepchem.models.tensorgraph.layers import Dense, Concat, SoftMax, \
  SoftMaxCrossEntropy, GraphConv, BatchNorm, \
  GraphPool, GraphGather, WeightedError, Dropout, BatchNormalization, Stack, Layer, Flatten, GraphCNNLayer, GraphCNNPool
  GraphPool, GraphGather, WeightedError, Dropout, BatchNormalization, Stack, Layer, Flatten, GraphCNN, GraphCNNPool
from deepchem.models.tensorgraph.layers import L2Loss, Label, Weights, Feature
from deepchem.models.tensorgraph.tensor_graph import TensorGraph
from deepchem.trans import undo_transforms
@@ -517,20 +517,18 @@ class PetroskiSuchTensorGraph(TensorGraph):
    self.mask = Feature(shape=(None, self.max_atoms, 1))

    gcnn1 = BatchNorm(
        GraphCNNLayer(
        GraphCNN(
            num_filters=64,
            in_layers=[self.vertex_features, self.adj_matrix, self.mask]))
    gcnn1 = Dropout(self.dropout, in_layers=gcnn1)
    gcnn2 = BatchNorm(
        GraphCNNLayer(
            num_filters=64, in_layers=[gcnn1, self.adj_matrix, self.mask]))
        GraphCNN(num_filters=64, in_layers=[gcnn1, self.adj_matrix, self.mask]))
    gcnn2 = Dropout(self.dropout, in_layers=gcnn2)
    gc_pool, adj_matrix, factors = GraphCNNPool(
        num_vertices=32, in_layers=[gcnn2, self.adj_matrix, self.mask])
    gc_pool = BatchNorm(gc_pool)
    gc_pool = Dropout(self.dropout, in_layers=gc_pool)
    gcnn3 = BatchNorm(
        GraphCNNLayer(num_filters=32, in_layers=[gc_pool, adj_matrix]))
    gcnn3 = BatchNorm(GraphCNN(num_filters=32, in_layers=[gc_pool, adj_matrix]))
    gcnn3 = Dropout(self.dropout, in_layers=gcnn3)
    gc_pool2, adj_matrix2, factors = GraphCNNPool(
        num_vertices=8, in_layers=[gcnn3, adj_matrix])
+23 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ from tensorflow.python.framework import test_util

from deepchem.feat.graph_features import ConvMolFeaturizer
from deepchem.feat.mol_graphs import ConvMol
from deepchem.models.tensorgraph.layers import Add, Conv3D, MaxPool2D, MaxPool3D
from deepchem.models.tensorgraph.layers import Add, Conv3D, MaxPool2D, MaxPool3D, GraphCNN, GraphCNNPoolLayer
from deepchem.models.tensorgraph.layers import AlphaShareLayer
from deepchem.models.tensorgraph.layers import AttnLSTMEmbedding
from deepchem.models.tensorgraph.layers import BatchNorm
@@ -723,3 +723,25 @@ class TestLayers(test_util.TensorFlowTestCase):
      output_tensor = SluiceLoss()(input1, input2)
      sess.run(tf.global_variables_initializer())
      assert output_tensor.eval() == 40.0

  def test_graphcnn(self):
    """Test that layers can automatically reshape inconsistent inputs."""
    V = np.random.uniform(size=(10, 100, 50)).astype(np.float32)
    adjs = np.random.uniform(size=(10, 100, 5, 100)).astype(np.float32)
    with self.test_session() as sess:
      out_tensor = GraphCNN(num_filters=6)(V, adjs)
      sess.run(tf.global_variables_initializer())
      result = out_tensor.eval()
      print(result.shape)
      assert result.shape == (10, 100, 6)

  def test_graphcnnpool(self):
    """Test that layers can automatically reshape inconsistent inputs."""
    V = np.random.uniform(size=(10, 100, 50)).astype(np.float32)
    adjs = np.random.uniform(size=(10, 100, 5, 100)).astype(np.float32)
    with self.test_session() as sess:
      out_tensor = GraphCNNPoolLayer(num_vertices=6)(V, adjs)
      sess.run(tf.global_variables_initializer())
      result = out_tensor.eval()
      print(result.shape)
      assert result.shape == (10, 6, 50)
+23 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ from deepchem.models.tensorgraph.layers import Feature, Conv1D, Dense, Flatten,
  SoftMaxCrossEntropy, ReduceMean, ToFloat, ReduceSquareDifference, Conv2D, MaxPool2D, ReduceSum, GraphConv, GraphPool, \
  GraphGather, BatchNorm, WeightedError, \
  Conv3D, MaxPool3D, \
  LSTMStep, AttnLSTMEmbedding, IterRefLSTMEmbedding
  LSTMStep, AttnLSTMEmbedding, IterRefLSTMEmbedding, GraphCNNPoolLayer, GraphCNN
from deepchem.models.tensorgraph.symmetry_functions import AtomicDifferentiatedDense


@@ -568,3 +568,25 @@ def test_AtomicDifferentialDense_pickle():
  tg.set_loss(atomic_differential_dense)
  tg.build()
  tg.save()


def testGraphCNN_pickle():
  V = Feature(shape=(None, 200, 50))
  A = Feature(shape=(None, 200, 1, 200))
  gcnn = GraphCNN(32, in_layers=[V, A])
  tg = TensorGraph()
  tg.add_output(gcnn)
  tg.set_loss(gcnn)
  tg.build()
  tg.save()


def testGraphCNNPoolLayer_pickle():
  V = Feature(shape=(None, 200, 50))
  A = Feature(shape=(None, 200, 1, 200))
  gcnnpool = GraphCNNPoolLayer(32, in_layers=[V, A])
  tg = TensorGraph()
  tg.add_output(gcnnpool)
  tg.set_loss(gcnnpool)
  tg.build()
  tg.save()