Commit 0a793fe5 authored by miaecle's avatar miaecle
Browse files

MPNN debug

parent 39063530
Loading
Loading
Loading
Loading
+30 −7
Original line number Diff line number Diff line
@@ -789,7 +789,7 @@ class MPNNTensorGraph(TensorGraph):
              feed_dict[label] = to_one_hot(y_b[:, index])
            if self.mode == "regression":
              feed_dict[label] = y_b[:, index:index + 1]
        if w_b is not None and not predict:
        if w_b is not None:
          feed_dict[self.weights] = w_b

        atom_feat = []
@@ -826,13 +826,36 @@ class MPNNTensorGraph(TensorGraph):
        yield feed_dict

  def predict(self, dataset, transformers=[], batch_size=None):
    length_dataset = dataset.y.shape[0]
    generator = self.default_generator(dataset, predict=True, pad_batches=True)
    y_pred = self.predict_on_generator(generator, transformers)
    return y_pred[:length_dataset]
    return self.predict_on_generator(generator, transformers)

  def predict_proba(self, dataset, transformers=[], batch_size=None):
    length_dataset = dataset.y.shape[0]
    generator = self.default_generator(dataset, predict=True, pad_batches=True)
    y_pred = self.predict_proba_on_generator(generator, transformers)
    return y_pred[:length_dataset]
 No newline at end of file
    return self.predict_proba_on_generator(generator, transformers)

  def predict_proba_on_generator(self, generator, transformers=[]):
    """
    Returns:
      y_pred: numpy ndarray of shape (n_samples, n_classes*n_tasks)
    """
    if not self.built:
      self.build()
    with self._get_tf("Graph").as_default():
      with tf.Session() as sess:
        saver = tf.train.Saver()
        self._initialize_weights(sess, saver)
        out_tensors = [x.out_tensor for x in self.outputs]
        results = []
        for feed_dict in generator:
          n_valid_samples = len(np.nonzero(feed_dict[self.weights][:,0])[0])
          feed_dict = {
              self.layers[k.name].out_tensor: v
              for k, v in six.iteritems(feed_dict)
          }
          feed_dict[self._training_placeholder] = 0.0
          result = np.array(sess.run(out_tensors, feed_dict=feed_dict))
          if len(result.shape) == 3:
            result = np.transpose(result, axes=[1, 0, 2])
          result = undo_transforms(result, transformers)
          results.append(result[:n_valid_samples])
        return np.concatenate(results, axis=0)
 No newline at end of file
+53 −0
Original line number Diff line number Diff line
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sat Jul 29 23:49:02 2017

@author: zqwu
"""

from __future__ import print_function
from __future__ import division
from __future__ import unicode_literals

import numpy as np
np.random.seed(123)
import tensorflow as tf
tf.set_random_seed(123)
import deepchem as dc

# Load Delaney dataset
delaney_tasks, delaney_datasets, transformers = dc.molnet.load_delaney(
    featurizer='Weave', split='index')
train_dataset, valid_dataset, test_dataset = delaney_datasets

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

n_atom_feat = 75
n_pair_feat = 14
# Batch size of models
batch_size = 64

model = dc.models.MPNNTensorGraph(
    len(delaney_tasks),
    n_atom_feat=n_atom_feat,
    n_pair_feat=n_pair_feat,
    T=3,
    M=5,
    batch_size=batch_size,
    learning_rate=0.0001,
    use_queue=False,
    mode="regression")

# Fit trained model
model.fit(train_dataset, nb_epoch=50, checkpoint_interval=100)
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)