Commit d39add8a authored by leswing's avatar leswing
Browse files

Weave only one out_layer

parent 62be7627
Loading
Loading
Loading
Loading
+21 −16
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ from deepchem.nn import activations
from deepchem.nn import initializations
from deepchem.nn import model_ops

from deepchem.models.tensorgraph.layers import Layer
from deepchem.models.tensorgraph.layers import Layer, PassThroughLayer
from deepchem.models.tensorgraph.layers import convert_to_layers


@@ -55,7 +55,7 @@ class Separate_AP(Layer):
class WeaveLayer(Layer):
  """ TensorGraph style implementation
    The same as deepchem.nn.WeaveLayer

    Note: Use WeaveLayerFactory to construct this layer
    """

  def __init__(self,
@@ -167,11 +167,11 @@ class WeaveLayer(Layer):

    self.build()

    atom_features = in_layers[0].out_tensor[0]
    pair_features = in_layers[0].out_tensor[1]
    atom_features = in_layers[1].out_tensor
    pair_features = in_layers[2].out_tensor

    pair_split = in_layers[1].out_tensor
    atom_to_pair = in_layers[2].out_tensor
    pair_split = in_layers[3].out_tensor
    atom_to_pair = in_layers[4].out_tensor

    AA = tf.matmul(atom_features, self.W_AA) + self.b_AA
    AA = self.activation(AA)
@@ -201,11 +201,11 @@ class WeaveLayer(Layer):
    else:
      P = pair_features

    out_tensor = [A, P]
    self.out_tensors = [A, P]
    if set_tensors:
      self.variables = self.trainable_weights
      self.out_tensor = out_tensor
    return out_tensor
      self.out_tensor = A
    return self.out_tensors

  def none_tensors(self):
    W_AP, b_AP, W_PP, W_PP, W_P, b_P = self.W_AP, self.b_AP, self.W_PP, self.W_PP, self.W_P, self.b_P
@@ -214,12 +214,12 @@ class WeaveLayer(Layer):
    W_AA, b_AA, W_PA, b_PA, W_A, b_A = self.W_AA, self.b_AA, self.W_PA, self.b_PA, self.W_A, self.b_A
    self.W_AA, self.b_AA, self.W_PA, self.b_PA, self.W_A, self.b_A = None, None, None, None, None, None

    out_tensor, trainable_weights, variables = self.out_tensor, self.trainable_weights, self.variables
    self.out_tensor, self.trainable_weights, self.variables, self.activation, self.init = None, [], [], None, None
    out_tensor, out_tensors, trainable_weights, variables = self.out_tensor, self.out_tensors, self.trainable_weights, self.variables
    self.out_tensor, self.out_tensors, self.trainable_weights, self.variables, self.activation, self.init = None, [], [], [], None, None

    return W_AP, b_AP, W_PP, W_PP, W_P, b_P, \
           W_AA, b_AA, W_PA, b_PA, W_A, b_A, \
           out_tensor, trainable_weights, variables
           out_tensor, out_tensors, trainable_weights, variables

  def set_tensors(self, tensor):
    self.W_AP, self.b_AP, self.W_PP, self.W_PP, self.W_P, self.b_P, \
@@ -227,6 +227,11 @@ class WeaveLayer(Layer):
    self.out_tensor, self.trainable_weights, self.variables = tensor


def WeaveLayerFactory(**kwargs):
  weaveLayer = WeaveLayer(**kwargs)
  return [PassThroughLayer(i, in_layers=weaveLayer) for i in range(2)]


class WeaveGather(Layer):
  """ TensorGraph style implementation
    The same as deepchem.nn.WeaveGather
+23 −3
Original line number Diff line number Diff line
@@ -3212,3 +3212,23 @@ class BetaShare(Layer):

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


class PassThroughLayer(Layer):
  """
  Layer which takes a tensor from in_tensor[0].out_tensors at an index
  """

  def __init__(self, output_num, **kwargs):
    """
    Parameters
    ----------
    output_num: int
      The index which to use as this layers out_tensor from in_layers[0]
    kwargs
    """
    self.output_num = output_num
    super(PassThroughLayer, self).__init__(**kwargs)

  def create_tensor(self, in_layers=None, set_tensors=True, **kwargs):
    self.out_tensor = self.in_layers[0].out_tensors[self.output_num]
+10 −6
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ from deepchem.feat.mol_graphs import ConvMol
from deepchem.metrics import to_one_hot, from_one_hot
from deepchem.models.tensorgraph.graph_layers import WeaveLayer, WeaveGather, \
  Combine_AP, Separate_AP, DTNNEmbedding, DTNNStep, DTNNGather, DAGLayer, \
  DAGGather, DTNNExtract, MessagePassing, SetGather
  DAGGather, DTNNExtract, MessagePassing, SetGather, WeaveLayerFactory
from deepchem.models.tensorgraph.layers import Dense, Concat, SoftMax, \
  SoftMaxCrossEntropy, GraphConv, BatchNorm, \
  GraphPool, GraphGather, WeightedError, Dropout, BatchNormalization, Stack
@@ -61,23 +61,27 @@ class WeaveTensorGraph(TensorGraph):
        """
    self.atom_features = Feature(shape=(None, self.n_atom_feat))
    self.pair_features = Feature(shape=(None, self.n_pair_feat))
    combined = Combine_AP(in_layers=[self.atom_features, self.pair_features])
    self.pair_split = Feature(shape=(None,), dtype=tf.int32)
    self.atom_split = Feature(shape=(None,), dtype=tf.int32)
    self.atom_to_pair = Feature(shape=(None, 2), dtype=tf.int32)
    weave_layer1 = WeaveLayer(
    weave_layer1 = WeaveLayerFactory(
        n_atom_input_feat=self.n_atom_feat,
        n_pair_input_feat=self.n_pair_feat,
        n_atom_output_feat=self.n_hidden,
        n_pair_output_feat=self.n_hidden,
        in_layers=[combined, self.pair_split, self.atom_to_pair])
    weave_layer2 = WeaveLayer(
        in_layers=[
            self.atom_features, self.pair_features, self.pair_split,
            self.atom_to_pair
        ])
    weave_layer2 = WeaveLayerFactory(
        n_atom_input_feat=self.n_hidden,
        n_pair_input_feat=self.n_hidden,
        n_atom_output_feat=self.n_hidden,
        n_pair_output_feat=self.n_hidden,
        update_pair=False,
        in_layers=[weave_layer1, self.pair_split, self.atom_to_pair])
        in_layers=[
            weave_layer1[0], weave_layer1[1], self.pair_split, self.atom_to_pair
        ])
    separated = Separate_AP(in_layers=[weave_layer2])
    dense1 = Dense(
        out_channels=self.n_graph_feat,