Commit f90d30aa authored by miaecle's avatar miaecle
Browse files

dropout for DAG

parent e2477458
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -581,7 +581,7 @@ class DAGLayer(Layer):
          Number of features listed per atom.
        max_atoms: int, optional
          Maximum number of atoms in molecules.
        layer_sizes: list of int, optional(default=[1000])
        layer_sizes: list of int, optional(default=[100])
          Structure of hidden layer(s)
        init: str, optional
          Weight initialization for filters.
@@ -683,7 +683,8 @@ class DAGLayer(Layer):
      # DAGgraph_step maps from batch_inputs to a batch of graph_features
      # of shape: (batch_size*max_atoms) * n_graph_features
      # representing the graph features of target atoms in each graph
      batch_outputs = self.DAGgraph_step(batch_inputs, self.W_list, self.b_list)
      batch_outputs = self.DAGgraph_step(batch_inputs, self.W_list, self.b_list,
                                         **kwargs)

      # index for targe atoms
      target_index = tf.stack([tf.range(n_atoms), parents[:, count, 0]], axis=1)
@@ -698,11 +699,13 @@ class DAGLayer(Layer):
      self.out_tensor = out_tensor
    return out_tensor

  def DAGgraph_step(self, batch_inputs, W_list, b_list):
  def DAGgraph_step(self, batch_inputs, W_list, b_list, **kwargs):
    outputs = batch_inputs
    for idw, W in enumerate(W_list):
      outputs = tf.nn.xw_plus_b(outputs, W, b_list[idw])
      outputs = self.activation(outputs)
      if 'training' in kwargs and kwargs['training'] == 1.0 and not self.dropout is None:
        outputs = tf.nn.dropout(outputs, 1.0 - self.dropout)
    return outputs

  def none_tensors(self):
@@ -794,18 +797,21 @@ class DAGGather(Layer):
    # Extract atom_features
    graph_features = tf.segment_sum(atom_features, membership)
    # sum all graph outputs
    outputs = self.DAGgraph_step(graph_features, self.W_list, self.b_list)
    outputs = self.DAGgraph_step(graph_features, self.W_list, self.b_list,
                                 **kwargs)
    out_tensor = outputs
    if set_tensors:
      self.variables = self.trainable_weights
      self.out_tensor = out_tensor
    return out_tensor

  def DAGgraph_step(self, batch_inputs, W_list, b_list):
  def DAGgraph_step(self, batch_inputs, W_list, b_list, **kwargs):
    outputs = batch_inputs
    for idw, W in enumerate(W_list):
      outputs = tf.nn.xw_plus_b(outputs, W, b_list[idw])
      outputs = self.activation(outputs)
      if 'training' in kwargs and kwargs['training'] == 1.0 and not self.dropout is None:
        outputs = tf.nn.dropout(outputs, 1.0 - self.dropout)
    return outputs

  def none_tensors(self):
+16 −0
Original line number Diff line number Diff line
@@ -366,6 +366,9 @@ class DAGModel(TensorGraph):
               n_atom_feat=75,
               n_graph_feat=30,
               n_outputs=30,
               layer_sizes=[100],
               layer_sizes_gather=[100],
               dropout=None,
               mode="classification",
               **kwargs):
    """
@@ -381,6 +384,12 @@ class DAGModel(TensorGraph):
              Number of features for atom in the graph
            n_outputs: int, optional
              Number of features for each molecule
            layer_sizes: list of int, optional
              Structure of hidden layer(s) in DAG propagation step
            layer_sizes_gather: list of int, optional
              Structure of hidden layer(s) in DAG gather step
            dropout: None or float
              Dropout probability, applied after each propagation step and gather step
            mode: str
              Either "classification" or "regression" for type of model.
            """
@@ -389,6 +398,9 @@ class DAGModel(TensorGraph):
    self.n_atom_feat = n_atom_feat
    self.n_graph_feat = n_graph_feat
    self.n_outputs = n_outputs
    self.layer_sizes = layer_sizes
    self.layer_sizes_gather = layer_sizes_gather
    self.dropout = dropout
    self.mode = mode
    super(DAGModel, self).__init__(**kwargs)
    self.build_graph()
@@ -410,6 +422,8 @@ class DAGModel(TensorGraph):
        n_graph_feat=self.n_graph_feat,
        n_atom_feat=self.n_atom_feat,
        max_atoms=self.max_atoms,
        layer_sizes=self.layer_sizes,
        dropout=self.dropout,
        batch_size=self.batch_size,
        in_layers=[
            self.atom_features, self.parents, self.calculation_orders,
@@ -419,6 +433,8 @@ class DAGModel(TensorGraph):
        n_graph_feat=self.n_graph_feat,
        n_outputs=self.n_outputs,
        max_atoms=self.max_atoms,
        layer_sizes=self.layer_sizes_gather,
        dropout=self.dropout,
        in_layers=[dag_layer1, self.membership])

    costs = []