Commit ab5a09a1 authored by Bharath Ramsundar's avatar Bharath Ramsundar
Browse files

Sequential

parent 548aa380
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -34,3 +34,4 @@ from deepchem.models.tensorgraph.models.symmetry_function_regression import BPSy
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.sequential import Sequential
+1 −1
Original line number Diff line number Diff line
@@ -997,7 +997,7 @@ class SoftMax(Layer):
  def create_tensor(self, in_layers=None, set_tensors=True, **kwargs):
    inputs = self._get_input_tensors(in_layers)
    if len(inputs) != 1:
      raise ValueError("Must only Softmax single parent")
      raise ValueError("Softmax must have a single input layer.")
    parent = inputs[0]
    out_tensor = tf.contrib.layers.softmax(parent)
    if set_tensors:
+25 −0
Original line number Diff line number Diff line
import unittest
import numpy as np
import deepchem as dc
from deepchem.models.tensorgraph.layers import Dense
from deepchem.models.tensorgraph.layers import SoftMax
from nose.tools import assert_true


class TestSequential(unittest.TestCase):
  """
  Test that sequential graphs work correctly.
  """

  def test_single_task_classifier(self):
    n_data_points = 20
    n_features = 2
    X = np.random.rand(n_data_points, n_features)
    y = [[0, 1] for x in range(n_data_points)]
    dataset = dc.data.NumpyDataset(X, y)
    model = dc.models.Sequential(learning_rate=0.01)
    model.add(Dense(out_channels=2))
    model.add(SoftMax())
    model.fit(dataset, loss="binary_crossentropy", nb_epoch=1000)
    prediction = np.squeeze(model.predict_on_batch(X))
    assert_true(np.all(np.isclose(prediction, y, atol=0.4)))
+45 −2
Original line number Diff line number Diff line
"""
Activations for models.

Copied over from Keras.
"""
from __future__ import print_function
from __future__ import division
@@ -87,22 +85,67 @@ def softsign(x):


def relu(x, alpha=0., max_value=None):
  """The rectified linear activation function

  Wrapper around model_ops.relu.

  Parameters
  ----------
  x: tf.Tensor
    Input tensor
  """
  return model_ops.relu(x, alpha=alpha, max_value=max_value)


def tanh(x):
  """The hyperbolic tanget activation function

  Wrapper around tf.nn.tanh.

  Parameters
  ----------
  x: tf.Tensor
    Input tensor
  """
  return tf.nn.tanh(x)


def sigmoid(x):
  """The sigmoidal activation function

  Wrapper around tf.nn.sigmoid.

  Parameters
  ----------
  x: tf.Tensor
    Input tensor
  """
  return tf.nn.sigmoid(x)


def hard_sigmoid(x):
  """The hard sigmoidal activation function

  Piecewise-linear approximation to sigmoid. 

  Parameters
  ----------
  x: tf.Tensor
    Input tensor
  """
  return model_ops.hard_sigmoid(x)


def linear(x):
  """A linear activation function.

  Note that a linear activation function is simply the identity.

  Parameters
  ----------
  x: tf.Tensor
    Input tensor
  """
  return x


+2 −2
Original line number Diff line number Diff line
@@ -690,8 +690,8 @@ def selu(x):

def hard_sigmoid(x):
  """Segment-wise linear approximation of sigmoid.
  Faster than sigmoid.
  Returns 0. if x < -2.5, 1. if x > 2.5.

  Faster than sigmoid. Returns 0. if x < -2.5, 1. if x > 2.5.
  In -2.5 <= x <= 2.5, returns 0.2 * x + 0.5.

  Parameters