Gradientzoo Python bindings
===========================

.. image:: https://readthedocs.org/projects/python-gradientzoo/badge/?version=latest
:target: http://python-gradientzoo.readthedocs.org/en/latest/?badge=latest
:alt: Documentation Status

This is a Python library for Gradientzoo's API - Version and share your trained
neural network models.  Loading a pre-trained neural network is easy with
Gradientzoo. Here's how easy it is to load a model with Tensorflow (full
example below):

.. code:: python

    import tensorflow as tf
    from gradientzoo.tensorflow import TensorflowGradientzoo

    # (build MNIST graph here)

    with tf.Session() as sess:
        # Load latest weights from Gradientzoo
        TensorflowGradientzoo('ericflo/mnist').load(sess)

        # Graph is now ready to use!


Saving models is similarly straightforward:

.. code:: python

    import tensorflow as tf
    from gradientzoo import TensorflowGradientzoo

    # (build MNIST graph here)

    with tf.Session() as sess:
        for epoch in xrange(6):
            # Train the model...

            # Save the updated weights out to Gradientzoo
            TensorflowGradientzoo('ericflo/mnist').save(sess)


Features
--------

Supports saving models in Keras_, variables in Tensorflow_, and networks in Lasagne_, and regular old files using Python with your framework of choice.


Installation
------------

You don't need this source code unless you want to modify the
package. If you just want to use the Gradientzoo Python bindings, you
should run:

    pip install --upgrade gradientzoo

or

    easy_install --upgrade gradientzoo

See http://www.pip-installer.org/en/latest/index.html for instructions
on installing pip. If you are on a system with easy_install but not
pip, you can use easy_install instead. If you're not using virtualenv,
you may have to prefix those commands with `sudo`. You can learn more
about virtualenv at http://www.virtualenv.org/

To install from source, run:

    python setup.py install


Documentation
-------------

Please see http://python-gradientzoo.readthedocs.org/ for the most up-to-date
documentation or visit a project page to see project-specific instructions,
e.g. https://www.gradientzoo.com/ericflo/mnist

Setting up a Gradientzoo Account
--------------------------------

Sign up for Gradientzoo at https://www.gradientzoo.com/register

Contribute
----------

- Issue Tracker: https://github.com/gradientzoo/python-gradientzoo/issues
- Source Code: https://github.com/gradientzoo/python-gradientzoo

Support
-------

If you are having issues, please let us know at support@gradientzoo.com

Full Tensorflow Example
-----------------------

.. code:: python

    import tensorflow as tf
    from tensorflow.examples.tutorials.mnist import input_data, mnist
    from gradientzoo.tensorflow import TensorflowGradientzoo

    learning_rate = 0.01
    batch_size = 100

    # Build MNIST graph
    images_placeholder = tf.placeholder(tf.float32,
                                        shape=(batch_size, mnist.IMAGE_PIXELS))
    labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))
    logits = mnist.inference(images_placeholder, 128, 32)
    loss = mnist.loss(logits, labels_placeholder)
    train_op = mnist.training(loss, learning_rate)
    eval_correct = mnist.evaluation(logits, labels_placeholder)

    # Start a Tensorflow session
    with tf.Session() as sess:
        # Load latest weights from Gradientzoo
        TensorflowGradientzoo('ericflo/mnist').load(sess)

        # Read in some data
        data_sets = input_data.read_data_sets('data', False)

        # Test the trained network on the dataset
        true_count = 0
        for step in xrange(data_sets.test.num_examples // batch_size):
            images_feed, labels_feed = data_sets.test.next_batch(batch_size, False)

            true_count += sess.run(eval_correct, feed_dict={
                images_placeholder: images_feed,
                labels_placeholder: labels_feed,
            })

        precision = true_count / float(data_sets.test.num_examples)
        print('Num Examples: %d  Num Correct: %d  Precision: %0.04f' %
              (data_sets.test.num_examples, true_count, precision))

.. _`gradientzoo.com/ericflo/mnist`: https://www.gradientzoo.com/ericflo/mnist
.. _`readthedocs.org`: http://python-gradientzoo.readthedocs.org/en/latest/
.. _Keras: http://keras.io/
.. _Tensorflow: https://www.tensorflow.org/
.. _Lasagne: http://lasagne.readthedocs.org/en/latest/