Skip to content

Library for learning and inference with Sum-product Networks


Notifications You must be signed in to change notification settings


Folders and files

Last commit message
Last commit date

Latest commit


Repository files navigation

This repository hosts an independent LibSPN implementation utilizing TensorFlow 1.x. For an alpha version of LibSPN integrated with Keras and compatible with Tensorflow 2.x, see libspn-keras.


LibSPN is a library for learning and inference with Sum-Product Networks. LibSPN is integrated with TensorFlow.

What are SPNs?

Sum-Product Networks (SPNs) are a probabilistic deep architecture with solid theoretical foundations, which demonstrated state-of-the-art performance in several domains. Yet, surprisingly, there are no mature, general-purpose SPN implementations that would serve as a platform for the community of machine learning researchers centered around SPNs. LibSPN is a new general-purpose Python library, which aims to become such a platform. The library is designed to make it straightforward and effortless to apply various SPN architectures to large-scale datasets and problems. The library achieves scalability and efficiency, thanks to a tight coupling with TensorFlow, a framework already used by a large community of researchers and developers in multiple domains.

Why LibSPN?

Several reasons:

  • LibSPN is a general-purpose library with a generic interface and tools for generating SPN structure, making it easy to apply SPNs to any domain/problem
  • LibSPN offers a simple Python interface for building or generating networks, learning, and inference, facilitating prototyping (e.g. in Jupyter) and enabling simple integration of SPNs with other software
  • LibSPN is integrated with TensorFlow, making it possible to combine SPNs with other deep learning methods
  • LibSPN uses concepts that should sound familiar to TensorFlow users (e.g. tensors, variables, feeding, queues, batching, TensorBoard etc.)
  • LibSPN leverages the power of TensorFlow to efficiently perform parallel computations on (multiple) GPU devices
  • LibSPN is extendable, making it easy to add custom operations and graph nodes



LibSPN requires installing tensorflow and tensorflow-probability first. The table below shows which version of each you'd need if you want to be specific:

tensorflow tensorflow-probability
1.14 0.7.0
1.13 0.6.0
1.12 0.5.0
1.11 0.4.0

First, install tensorflow or tensorflow-gpu:

pip install tensorflow-gpu

Then, install tensorflow-probability:

pip install tensorflow-probability


LibSPN is also available on pypi:

pip install libspn

Features of LibSPN

  • Simple interface for manual creation of custom network architectures

    • Automatic SPN validity checking and scope calculation
    • Adding explicit latent variables to sums/mixtures
    • Weight sharing
  • Integration with TensorFlow

    • SPN graph is converted to TensorFlow graph realizing specific algorithms/computations
    • Inputs to the network come from TensorFlow feeds or any TensorFlow tensors
  • SPN structure generation and learning

    • Dense random SPN generator
    • Simple naive Bayes mixture model generator
  • Loading and saving of structure and weights of learned models

  • Simple interface for random data generation, data loading and batching

    • Random data sampling from Gaussian Mixtures
    • Using TensorFlow queues for data loading, shuffling and batching
  • Built-in visualizations

    • SPN graph structure visualization
    • Data/distribution visualizations
  • SPN Inference

    • SPN/MPN value calculation
    • Gradient calculation
    • Inferring MPE state

Papers using LibSPN