All Projects → clinicalml → Structuredinference

clinicalml / Structuredinference

Licence: mit
Structured Inference Networks for Nonlinear State Space Models

Projects that are alternatives of or similar to Structuredinference

Scnn
Segment-CNN: A Framework for Temporal Action Localization in Untrimmed Videos via Multi-stage CNNs
Stars: ✭ 228 (-0.87%)
Mutual labels:  jupyter-notebook
Snap N Eat
Food detection and recommendation with deep learning
Stars: ✭ 229 (-0.43%)
Mutual labels:  jupyter-notebook
Comp Genomics Class
Code and examples for JHU Computational Genomics class
Stars: ✭ 228 (-0.87%)
Mutual labels:  jupyter-notebook
Nlp
Stars: ✭ 229 (-0.43%)
Mutual labels:  jupyter-notebook
Cd4ml Workshop
Repository with sample code and instructions for "Continuous Intelligence" and "Continuous Delivery for Machine Learning: CD4ML" workshops
Stars: ✭ 229 (-0.43%)
Mutual labels:  jupyter-notebook
Transfer learning music
Transfer learning for music classification and regression tasks
Stars: ✭ 228 (-0.87%)
Mutual labels:  jupyter-notebook
Functional intro to python
[tutorial]A functional, Data Science focused introduction to Python
Stars: ✭ 228 (-0.87%)
Mutual labels:  jupyter-notebook
Beakerx
Beaker Extensions for Jupyter Notebook
Stars: ✭ 2,594 (+1027.83%)
Mutual labels:  jupyter-notebook
Dsnd term1
Contains files related to content and project of DSND
Stars: ✭ 229 (-0.43%)
Mutual labels:  jupyter-notebook
Movie Plots By Genre
Movie plots by genre tutorial at PyData Berlin 2016
Stars: ✭ 230 (+0%)
Mutual labels:  jupyter-notebook
Weatherbench
A benchmark dataset for data-driven weather forecasting
Stars: ✭ 227 (-1.3%)
Mutual labels:  jupyter-notebook
Question Generation
Generating multiple choice questions from text using Machine Learning.
Stars: ✭ 227 (-1.3%)
Mutual labels:  jupyter-notebook
Applied Reinforcement Learning
Reinforcement Learning and Decision Making tutorials explained at an intuitive level and with Jupyter Notebooks
Stars: ✭ 229 (-0.43%)
Mutual labels:  jupyter-notebook
Statistics python codes
《统计学原理实验教程(Python)》书中代码实现。尽可能加注释,力求代码的可复用性。
Stars: ✭ 230 (+0%)
Mutual labels:  jupyter-notebook
Mydatascienceportfolio
Applying Data Science and Machine Learning to Solve Real World Business Problems
Stars: ✭ 227 (-1.3%)
Mutual labels:  jupyter-notebook
Kagglestruggle
Kaggle Struggle
Stars: ✭ 228 (-0.87%)
Mutual labels:  jupyter-notebook
Predicting winning teams
This is the code for "Predicting the Winning Team with Machine Learning" by Siraj Raval on Youtube
Stars: ✭ 229 (-0.43%)
Mutual labels:  jupyter-notebook
Quantiacs Python
Python version of Quantiacs toolbox and sample trading strategies
Stars: ✭ 230 (+0%)
Mutual labels:  jupyter-notebook
Fusenet
Deep fusion project of deeply-fused nets, and the study on the connection to ensembling
Stars: ✭ 230 (+0%)
Mutual labels:  jupyter-notebook
Ssd scene text detection
Detect text in natural images with SSD, Single Shot Detection
Stars: ✭ 229 (-0.43%)
Mutual labels:  jupyter-notebook

structuredInf

Code to fully reproduce benchmark results (and to extend for your own purposes) from the paper:

Krishnan, Shalit, Sontag. Structured Inference Networks for Nonlinear State Space Models, AAAI 2017.

See here for a simplified and easier to use version of the code.

Goal

The goal of this package is to provide a black box inference algorithm for learning models of time-series data. Inference during learning and at test time is based on compiled recognition or inference network.

Model

The figure below describes a simple model of time-series data.

This method is a good fit if:

  • You have an arbitrarily specified state space model whose parameters you're interested in fitting.
  • You would like to have a method for fast posterior inference at train and test time
  • Your temporal generative model has Gaussian latent variables (mean/variance can be a nonlinear function of previous timestep's variables).

Deep Kalman Filter

The code uses variational inference during learning to maximize the likelihood of the observed data:

Evidence Lower Bound

Generative Model

  • The latent variables z1...zT and the observations x1...xT describe the generative process for the data.
  • The figure depicts a state space model for time-varying data.
  • The emission and transition functions may be pre-specified to have a fixed functional form, a parametric functional form, a function parameterized by a deep neural networks or some combination thereof.

Inference Model

The box q(z1..zT | x1...xT) represents the inference network. There are several supported inference networks within this package.

  • Inference implemented with a bi-directional LSTM
  • Inference implemented with an LSTM conditioned on observations in the future
  • Inference implemented with an LSTM conditioned on observations from the past

Installation

Requirements

This package has the following requirements:

python2.7

Theano Used for automatic differentiations

[theanomodels] (https://github.com/clinicalml/theanomodels) Wrapper around theano that takes care of bookkeeping, saving/loading models etc. Clone the github repository and add its location to the PYTHONPATH environment variable so that it is accessible by python.

[pykalman] (https://pykalman.github.io/) [Optional: For running baseline UKFs/KFs]

An NVIDIA GPU w/ atleast 6G of memory is recommended.

Once the requirements have been met, clone this repository and it's ready to run.

Folder Structure

The following folders contain code to reproduct the results reported in our paper:

  • expt-synthetic, expt-polyphonic: Contains code and instructions for reproducing results from the paper.
  • baselines/: Contains to run some of the baseline algorithms on the synthetic data
  • ipynb/: Ipython notebooks for visualizing saved checkpoints and building plots

The main files of interest are:

  • parse_args_dkf.py: Arguments that the model expects to be present. Looking through it is useful to understand the different knobs available to tune the model.
  • stinfmodel/dkf.py: Code to construct the inference and generative model. The code is commented to enable easy modification for different scenarios.
  • stinfmodel/evaluate.py: Code to evaluate the Deep Kalman Filter's performance during learning.
  • stinfmodel/learning.py: Code for performing stochastic gradient ascent in the Evidence Lower Bound.

Dataset

We use numpy tensors to store the datasets with binary numpy masks to allow batch sizes comprising sequences of variable length. We train the models using mini-batch gradient descent on negative ELBO.

Format

The code to run on polyphonic and synthetic datasets has already been created in the theanomodels repository. See theanomodels/datasets/load.py for how the dataset is created and loaded.

The datasets are stored in three dimensional numpy tensors. To deal with datapoints of different lengths, we use numpy matrices comprised of binary masks. There may be different choices to manipulate data that you may adopt depending on your needs and this is merely a guideline.

assert type(dataset) is dict,'Expecting dictionary'
dataset['train'] # N_train x T_train_max x dim_observation : training data
dataset['test']  # N_test  x T_test_max  x dim_observation : validation data
dataset['valid'] # N_valid x T_valid_max x dim_observation : test data
dataset['mask_train'] # N_train x T_train_max : training masks
dataset['mask_test']  # N_test  x T_test_max  : validation masks
dataset['mask_valid'] # N_valid x T_valid_max : test masks
dataset['data_type'] # real/binary
dataset['has_masks'] # true/false

During learning, we select a minibatch of these tensors to update the weights of the model.

Running on different datasets

See the folder expt-template for an example of how to setup your data and run the code on your data

References:

@inproceedings{krishnan2016structured,
  title={Structured Inference Networks for Nonlinear State Space Models},
  author={Krishnan, Rahul G and Shalit, Uri and Sontag, David},
  booktitle={AAAI},
  year={2017}
}

This paper subsumes the work in : [Deep Kalman Filters] (https://arxiv.org/abs/1511.05121)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].