-
Notifications
You must be signed in to change notification settings - Fork 781
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ea2303c
commit e76f187
Showing
4 changed files
with
212 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
# Contributing guidelines | ||
|
||
## How to become a contributor and submit your own code | ||
|
||
### Contributor License Agreements | ||
|
||
We'd love to accept your patches! Before we can take them, we have to jump a | ||
couple of legal hurdles. | ||
|
||
Please fill out either the individual or corporate Contributor License Agreement | ||
(CLA). | ||
|
||
* If you are an individual writing original source code and you're sure you | ||
own the intellectual property, then you'll need to sign an [individual | ||
CLA](http://code.google.com/legal/individual-cla-v1.0.html). | ||
* If you work for a company that wants to allow you to contribute your work, | ||
then you'll need to sign a [corporate | ||
CLA](http://code.google.com/legal/corporate-cla-v1.0.html). | ||
|
||
Follow either of the two links above to access the appropriate CLA and | ||
instructions for how to sign and return it. Once we receive it, we'll be able to | ||
accept your pull requests. | ||
|
||
***NOTE***: Only original source code from you and other people that have signed | ||
the CLA can be accepted into the main repository. | ||
|
||
### Contributing code | ||
|
||
If you have improvements to this library, send us your pull requests! For those | ||
just getting started, GitHub has a | ||
[howto](https://help.github.com/articles/using-pull-requests/). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
# Graph Nets library | ||
|
||
[Graph Nets](https://github.com/deepmind/graph_nets) is DeepMind's library for | ||
building graph networks in Tensorflow and Sonnet. | ||
|
||
Contact graph-nets@google.com for comments and questions. | ||
|
||
#### What are graph networks? | ||
|
||
A graph network takes a graph as input and returns a graph as output. The input | ||
graph has edge- (*E* ), node- (*V* ), and global-level (**u**) attributes. The | ||
output graph has the same structure, but updated attributes. Graph networks are | ||
part of the broader family of "graph neural networks" (Scarselli et al., 2009). | ||
|
||
To learn more about graph networks, see our arXiv paper: [Relational inductive | ||
biases, deep learning, and graph networks](https://arxiv.org/abs/1806.01261). | ||
|
||
![Graph network](images/graph-network.png) | ||
|
||
## Installation | ||
|
||
The Graph Nets library can be installed from pip. | ||
|
||
This installation is compatible with Linux/Mac OS X, and Python 2.7 and 3.4+. | ||
|
||
To install the library, run: | ||
|
||
```shell | ||
$ pip install graph_nets | ||
``` | ||
|
||
## Usage example | ||
|
||
The following code constructs a simple graph net module and connects it to data. | ||
|
||
```python | ||
import graph_nets as gn | ||
import sonnet as snt | ||
|
||
# Provide your own functions to generate graph-structured data. | ||
input_graphs = get_graphs() | ||
|
||
# Create the graph network. | ||
graph_net_module = gn.modules.GraphNetwork( | ||
edge_model_fn=lambda: snt.nets.MLP([32, 32]), | ||
node_model_fn=lambda: snt.nets.MLP([32, 32]), | ||
global_model_fn=lambda: snt.nets.MLP([32, 32])) | ||
|
||
# Pass the input graphs to the graph network, and return the output graphs. | ||
output_graphs = graph_net_module(input_graphs) | ||
``` | ||
|
||
## Demo Jupyter notebooks | ||
|
||
The library includes demos which show how to create, manipulate, and | ||
train graph networks to reason about graph-structured data, on a | ||
shortest path-finding task, a sorting task, and a physical prediction task. | ||
Each demo uses the same graph network architecture, which highlights the | ||
flexibility of the approach. | ||
|
||
### Try the demos in your browser in [Colaboratory](https://colab.research.google.com) | ||
|
||
To try out the demos without installing anything locally, you can run the demos | ||
in your browser (even on your phone) via a cloud Colaboratory backend. Click a | ||
demo link below, and follow the instructions in the notebook. | ||
|
||
---------------- | ||
|
||
#### [Run "shortest path demo" in browser](https://colab.research.google.com/github/deepmind/graph_nets/blob/master/demos/shortest_path.ipynb) | ||
|
||
The "shortest path demo" creates random graphs, and trains a graph network to | ||
label the nodes and edges on the shortest path between any two nodes. Over a | ||
sequence of message-passing steps (as depicted by each step's plot), the | ||
model refines its prediction of the shortest path. | ||
|
||
![Shortest path](images/shortest-path.png) | ||
|
||
---------------- | ||
|
||
#### [Run "sort demo" in browser](https://colab.research.google.com/github/deepmind/graph_nets/blob/master/demos/sort.ipynb) | ||
|
||
The "sort demo" creates lists of random numbers, and trains a graph network to | ||
sort the list. After a sequence of message-passing steps, the model makes an | ||
accurate prediction of which elements (columns in the figure) come next after | ||
each other (rows). | ||
|
||
![Sort](images/sort.png) | ||
|
||
---------------- | ||
|
||
#### [Run "physics demo" in browser](https://colab.research.google.com/github/deepmind/graph_nets/blob/master/demos/physics.ipynb) | ||
|
||
The "physics demo" creates random mass-spring physical systems, and trains a | ||
graph network to predict the state of the system on the next timestep. The | ||
model's next-step predictions can be fed back in as input to create a rollout of | ||
a future trajectory. Each subplot below shows the true and predicted mass-spring | ||
system states over 50 steps. This is similar to the model and experiments in | ||
Battaglia et al. (2016)'s "interaction networks". | ||
|
||
![Physics](images/physics.png) | ||
|
||
---------------- | ||
|
||
### Run the demos on your local machine | ||
|
||
To install the necessary dependencies, run: | ||
|
||
```shell | ||
$ pip install jupyter matplotlib scipy | ||
``` | ||
|
||
To try the demos, run: | ||
|
||
```shell | ||
$ cd <path-to-graph-nets-library>/demos | ||
$ jupyter notebook | ||
``` | ||
then open a demo through the Jupyter notebook interface. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# Copyright 2018 The GraphNets Authors. All Rights Reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
# ============================================================================ | ||
"""Setuptools installation script.""" | ||
|
||
from __future__ import absolute_import | ||
from __future__ import division | ||
from __future__ import print_function | ||
|
||
from setuptools import find_packages | ||
from setuptools import setup | ||
|
||
description = """Graph Nets is DeepMind's library for building graph networks in | ||
Tensorflow and Sonnet. | ||
""" | ||
|
||
setup( | ||
name="graph_nets", | ||
version="1.0.0", | ||
description="Library for building graph networks in Tensorflow and Sonnet.", | ||
long_description=description, | ||
author="DeepMind", | ||
license="Apache License, Version 2.0", | ||
keywords=["graph networks", "tensorflow", "sonnet", "machine learning"], | ||
url="https://github.com/deepmind/graph-nets", | ||
packages=find_packages(), | ||
install_requires=[ | ||
"absl-py", | ||
"dm-sonnet", | ||
"future", | ||
"networkx", | ||
"numpy", | ||
"setuptools", | ||
"six", | ||
"tensorflow", | ||
], | ||
classifiers=[ | ||
"Development Status :: 4 - Beta", | ||
"Intended Audience :: Developers", | ||
"Intended Audience :: Education", | ||
"Intended Audience :: Science/Research", | ||
"License :: OSI Approved :: Apache Software License", | ||
"Operating System :: POSIX :: Linux", | ||
"Operating System :: Microsoft :: Windows", | ||
"Operating System :: MacOS :: MacOS X", | ||
"Programming Language :: Python :: 2.7", | ||
"Programming Language :: Python :: 3.4", | ||
"Topic :: Scientific/Engineering :: Artificial Intelligence", | ||
], | ||
) |