Skip to main content

Implementations of graph neural networks for molecular machine learning

Project description

MolGraph: Graph Neural Networks for Molecular Machine Learning

This is an early release; things are still being updated and added. Hence, API compatibility may break in the future.

Any feedback is welcomed!

Manuscript

See pre-print

Documentation

See readthedocs

Installation

Install via pip:

pip install git+https://github.com/akensert/molgraph.git

Install via docker:

git clone https://github.com/akensert/molgraph.git
cd molgraph/docker
docker build -t molgraph-tf[-gpu][-jupyter]/molgraph:0.0 molgraph-tf[-gpu][-jupyter]/
docker run -it [-p 8888:8888] molgraph-tf[-gpu][-jupyter]/molgraph:0.0

Requirements/dependencies

  • Python (version ~= 3.8.10)
  • TensorFlow (version ~= 2.7.0)
  • RDKit (version ~= 2022.3.3)
  • NumPy (version ~= 1.21.2)
  • Pandas (version ~= 1.0.3)

Tested with

  • Ubuntu 20.04 - Python 3.8.10
  • MacOS Monterey (12.3.1) - Python 3.10.3

Minimalistic implementation

A complete GNN implementation for small molecular graphs in about 30 lines of code:

from tensorflow import keras
from molgraph import chemistry
from molgraph import layers
from molgraph import models

# Obtain dataset, specifically ESOL
qm7 = chemistry.datasets.get('esol')

# Define molecular graph encoder
atom_encoder = chemistry.AtomFeaturizer([
    chemistry.features.Symbol(),
    chemistry.features.Hybridization(),
    # ...
])

bond_encoder = chemistry.BondFeaturizer([
    chemistry.features.BondType(),
    # ...
])

encoder = chemistry.MolecularGraphEncoder(atom_encoder, bond_encoder)

# Obtain features and associated labels
x_train = encoder(qm7['train']['x'])
y_train = qm7['train']['y']

x_test = encoder(qm7['test']['x'])
y_test = qm7['test']['y']

# Build model via Keras API
gnn_model = keras.Sequential([
    keras.layers.Input(type_spec=x_train.spec),
    layers.GATConv(name='gat_conv_1'),
    layers.GATConv(name='gat_conv_2'),
    layers.Readout(),
    keras.layers.Dense(units=1024, activation='relu'),
    keras.layers.Dense(units=y_train.shape[-1])
])

# Compile, fit and evaluate
gnn_model.compile(optimizer='adam', loss='mae')
gnn_model.fit(x_train, y_train, epochs=50)
gnn_model.evaluate(x_test, y_test)

# Compute gradient activation maps
gam_model = models.GradientActivationMapping(
    model=gnn_model, layer_names=['gat_conv_1', 'gat_conv_2'])

maps = gam_model.predict(x_train)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

molgraph-0.0.1.tar.gz (80.2 kB view details)

Uploaded Source

Built Distribution

molgraph-0.0.1-py3-none-any.whl (126.1 kB view details)

Uploaded Python 3

File details

Details for the file molgraph-0.0.1.tar.gz.

File metadata

  • Download URL: molgraph-0.0.1.tar.gz
  • Upload date:
  • Size: 80.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for molgraph-0.0.1.tar.gz
Algorithm Hash digest
SHA256 f1cb0eb2b9670987840a86858ea6849cb368a7e12665d720df7e725991652d07
MD5 5201dae80da1f93dc66f0036345e93fd
BLAKE2b-256 b843bc4ec2640d176f1ad16821e3c1d580233798a22c462ef8d684734b05e468

See more details on using hashes here.

File details

Details for the file molgraph-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: molgraph-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 126.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for molgraph-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 daedb70690029a2f7e4afa56f0231d9e9fc0767af240a82c5f931559dc861ce0
MD5 fb3f6d907c22dcd69a29e845c1867cce
BLAKE2b-256 ec1b1998af904b3c034f761e8c5047f4098aa01a6e05259e45738bd33f094f21

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page