Commit 2f605d77 authored by miaecle's avatar miaecle
Browse files

examples and yapfed

parent 120bdde4
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -12,7 +12,9 @@ from deepchem.trans import undo_transforms
from deepchem.utils.save import log
from deepchem.models import Model


class TorchMultitaskModel(Model):

  def __init__(self,
               layer_sizes=[1000],
               weight_init_stddevs=[.02],
@@ -106,7 +108,8 @@ class TorchMultitaskModel(Model):
    elif self.optimizer == 'adagrad':
      train_op = torch.optim.Adagrad(self.trainables, lr=self.learning_rate)
    elif self.optimizer == 'rmsprop':
      train_op = torch.optim.RMSprop(self.trainables, lr=self.learning_rate, momentum=self.momentum)
      train_op = torch.optim.RMSprop(
          self.trainables, lr=self.learning_rate, momentum=self.momentum)
    elif self.optimizer == 'sgd':
      train_op = torch.optim.SGD(self.trainables, lr=self.learning_rate)
    else:
@@ -151,8 +154,7 @@ class TorchMultitaskModel(Model):
          # Turns out there are valid cases where we don't want pad-batches
          # on by default.
          #dataset.iterbatches(batch_size, pad_batches=True)):
          dataset.iterbatches(
              self.batch_size, pad_batches=self.pad_batches)):
          dataset.iterbatches(self.batch_size, pad_batches=self.pad_batches)):
        if ind % log_every_N_batches == 0:
          log("On batch %d" % ind, self.verbose)
        # Run training op.
@@ -167,8 +169,7 @@ class TorchMultitaskModel(Model):
        avg_loss += loss
        n_batches += 1
      avg_loss = float(avg_loss.data.numpy()) / n_batches
      log('Ending epoch %d: Average loss %g' % (epoch, avg_loss),
            self.verbose)
      log('Ending epoch %d: Average loss %g' % (epoch, avg_loss), self.verbose)
    time2 = time.time()
    print("TIMING: model fitting took %0.3f s" % (time2 - time1), self.verbose)
    ############################################################## TIMING
+13 −11
Original line number Diff line number Diff line
@@ -10,12 +10,10 @@ import numpy as np
from deepchem.metrics import from_one_hot
from deepchem.models.torch_models import TorchMultitaskModel


class TorchMultitaskClassification(TorchMultitaskModel):
  def __init__(self,
               n_tasks,
               n_features,
               n_classes=2,
               **kwargs):

  def __init__(self, n_tasks, n_features, n_classes=2, **kwargs):
    """Constructs the computational graph.

    This function constructs the computational graph for the model. It relies
@@ -77,10 +75,12 @@ class TorchMultitaskClassification(TorchMultitaskModel):
      W_init = np.random.normal(0, weight_init_stddevs[-1],
                                (prev_layer_size, self.n_classes))
      W_init = torch.FloatTensor(W_init)
      self.task_W_list.append(torch.autograd.Variable(W_init, requires_grad=True))
      self.task_W_list.append(
          torch.autograd.Variable(W_init, requires_grad=True))
      b_init = np.full((self.n_classes,), bias_init_consts[-1])
      b_init = torch.FloatTensor(b_init)
      self.task_b_list.append(torch.autograd.Variable(b_init, requires_grad=True))
      self.task_b_list.append(
          torch.autograd.Variable(b_init, requires_grad=True))
    self.trainables = self.W_list + self.b_list + self.task_W_list + self.task_b_list
    self.regularizaed_variables = self.W_list + self.task_W_list

@@ -103,7 +103,9 @@ class TorchMultitaskClassification(TorchMultitaskModel):
  def cost(self, logit, label, weight):
    loss = []
    for i in range(logit.size()[0]):
      loss.append(torch.nn.functional.cross_entropy(logit[i,:], label[i].long()).mul(weight[i]))
      loss.append(
          torch.nn.functional.cross_entropy(logit[i, :], label[i].long()).mul(
              weight[i]))
    loss = torch.cat(loss).mean()
    return loss

+10 −9
Original line number Diff line number Diff line
@@ -9,11 +9,10 @@ import torch
import numpy as np
from deepchem.models.torch_models import TorchMultitaskModel


class TorchMultitaskRegression(TorchMultitaskModel):
  def __init__(self,
               n_tasks,
               n_features,
               **kwargs):

  def __init__(self, n_tasks, n_features, **kwargs):
    """Constructs the computational graph.

    This function constructs the computational graph for the model. It relies
@@ -74,10 +73,12 @@ class TorchMultitaskRegression(TorchMultitaskModel):
      W_init = np.random.normal(0, weight_init_stddevs[-1],
                                (prev_layer_size, 1))
      W_init = torch.FloatTensor(W_init)
      self.task_W_list.append(torch.autograd.Variable(W_init, requires_grad=True))
      self.task_W_list.append(
          torch.autograd.Variable(W_init, requires_grad=True))
      b_init = np.full((1,), bias_init_consts[-1])
      b_init = torch.FloatTensor(b_init)
      self.task_b_list.append(torch.autograd.Variable(b_init, requires_grad=True))
      self.task_b_list.append(
          torch.autograd.Variable(b_init, requires_grad=True))
    self.trainables = self.W_list + self.b_list + self.task_W_list + self.task_b_list
    self.regularizaed_variables = self.W_list + self.task_W_list

+45 −0
Original line number Diff line number Diff line
"""
Script that trains multitask(torch) models on Delaney dataset.
"""
from __future__ import print_function
from __future__ import division
from __future__ import unicode_literals

import sys
sys.path.append('../../contrib/torch')
from torch_multitask_regression import TorchMultitaskRegression
import numpy as np
import deepchem as dc

# Only for debug!
np.random.seed(123)

# Load Delaney dataset
n_features = 1024
delaney_tasks, delaney_datasets, transformers = dc.molnet.load_delaney()
train_dataset, valid_dataset, test_dataset = delaney_datasets

# Fit models
metric = dc.metrics.Metric(dc.metrics.pearson_r2_score, np.mean)

model = TorchMultitaskRegression(
    len(delaney_tasks),
    n_features,
    layer_sizes=[1000],
    dropouts=[.25],
    learning_rate=0.001,
    batch_size=50,
    verbosity="high")

# Fit trained model
model.fit(train_dataset, nb_epoch=10)

print("Evaluating model")
train_scores = model.evaluate(train_dataset, [metric], transformers)
valid_scores = model.evaluate(valid_dataset, [metric], transformers)

print("Train scores")
print(train_scores)

print("Validation scores")
print(valid_scores)
+44 −0
Original line number Diff line number Diff line
"""
Script that trains multitask(torch) models on Tox21 dataset.
"""
from __future__ import print_function
from __future__ import division
from __future__ import unicode_literals

import sys
sys.path.append('../../contrib/torch')
from torch_multitask_classification import TorchMultitaskClassification
import numpy as np
import deepchem as dc

# Only for debug!
np.random.seed(123)

# Load Tox21 dataset
n_features = 1024
tox21_tasks, tox21_datasets, transformers = dc.molnet.load_tox21()
train_dataset, valid_dataset, test_dataset = tox21_datasets

# Fit models
metric = dc.metrics.Metric(dc.metrics.roc_auc_score, np.mean)

model = TorchMultitaskClassification(
    len(tox21_tasks),
    n_features,
    layer_sizes=[1000],
    dropouts=[.25],
    learning_rate=0.001,
    batch_size=50)

# Fit trained model
model.fit(train_dataset)

print("Evaluating model")
train_scores = model.evaluate(train_dataset, [metric], transformers)
valid_scores = model.evaluate(valid_dataset, [metric], transformers)

print("Train scores")
print(train_scores)

print("Validation scores")
print(valid_scores)