https://github.com/GPflow/GPflow
Revision db383233eaf595a04b4eafc9872845e66ba54634 authored by Mark van der Wilk on 23 November 2016, 18:31:25 UTC, committed by James Hensman on 23 November 2016, 18:31:25 UTC
This squash-commit contains a large volume of work by @markvdw and @alexisboukouvalas. I'm keeping all of the commit history here for posterity. Interested viewers can see some discussion on github, under pull request #195. * Initial code for new kernel expectations. - RBF done. - Added another transformation in etransforms.py. * first step to merge gplvm and kernexp approaches * Added kernel expectations of linear, and eKxz for RBF. - NB: Linear still need to be tested better. - Todo: exKxz for linear. * Added multidimensional quadrature in `Kern` base class for kernel expectations. - Replaced monte carlo tests with more reliable quadrature tests. - Added exKxz for `Linear` kernel * testing new ekernels code, starting on active dimensions, further testing needed as well as modifying Bayesian GPLVM code * Linear and Polynomial kernels did not respect active_dims properly in Kdiag. - Added slice call to Linear.Kdiag - Fixed TestSlice to test more kernels. - Fxied TestSlice to have the correct inputdim. * Begin work on sum kernel, smoothing out active_dims for ekernels. * Fixed `input_dim` in `test_kerns.py`. Added assertion. * kernexp quadrature now works with `active_dims`. - exKzx which doesn't work now raises an error from TensorFlow. - Various other assertions. * Better deduction of `input_dim` for `kernels.Combination`. * Small fix of test. * Fixed issue of KzxKxz in Add kernel. Solution checks for diagonal q(X) and performs quadrature on the covariance of KzxKxz if not diagonal. * GPLVM now works with new kernel expectation code. - Added a new DiagMatrix transform. - Removed legacy code. - Modified GPLVM to accept full covariance matrices. * Fixing a small error in DiagMatrix transform. * Added warnings. * Removed etransforms code. BlockTriDiagonalTransform is now only used in tests. * Prevent `TridiagonalBlockRep` from being tested as a `Transform`. * improvements to DiagonalMatrix transform * improved testing of kernel slice * update test to use kernels * `ekernels.RBF` ARD bug fixed. * Increased test coverage. * Increased test coverage. * docstring for gplvm, removed unused variable in ekernels * testing composite kernels in gplvm * Added Prod to `ekernels.py`. * Fixed usage of `tf.gather_nd`, which does not have a gradient in `_slice_cov()`. * add GPLVM notebook, increase testing to include Prod kernels, add documentation stub, fix bibliography * improve GPLVM notebook with working example * Fixed bug that `X_var` in `BayesianGPLVM` gets slightly different values. * Quadrature can be switched off, plus the appropriate checks. * Kernel expectations now accept 2D variances. * Fix to test. * Reworked quadrature code in Add in anticipation of adding exact expectations for certain pairs of kernels. * Added Linear + Add cross terms for overlapping active_dims. * Initial try for extra test for `ekernels.Add` cross terms. * `_slice_cov` now again compatible with numpy arrays. * Requested code reviews.
1 parent 419c43b
Tip revision: db383233eaf595a04b4eafc9872845e66ba54634 authored by Mark van der Wilk on 23 November 2016, 18:31:25 UTC
Kernel expectations (#195)
Kernel expectations (#195)
Tip revision: db38323
setup.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
from setuptools import setup
import re
import os
import sys
import tensorflow as tf
# load version form _version.py
VERSIONFILE = "GPflow/_version.py"
verstrline = open(VERSIONFILE, "rt").read()
VSRE = r"^__version__ = ['\"]([^'\"]*)['\"]"
mo = re.search(VSRE, verstrline, re.M)
if mo:
verstr = mo.group(1)
else:
raise RuntimeError("Unable to find version string in %s." % (VERSIONFILE,))
# Compile the bespoke TensorFlow ops in-place. Not sure how this would work if this script wasn't executed as `develop`.
tf_include = tf.sysconfig.get_include()
compile_command = "g++ -std=c++11 -shared ./GPflow/tfops/vec_to_tri.cc " \
"GPflow/tfops/tri_to_vec.cc -o GPflow/tfops/matpackops.so " \
"-fPIC -I {}".format(tf_include)
if sys.platform == "darwin":
# Additional command for Macs, as instructed by the TensorFlow docs
compile_command += " -undefined dynamic_lookup"
elif sys.platform.startswith("linux"):
gcc_version = int(re.search('\d+.', os.popen("gcc --version").read()).group()[0])
if gcc_version > 4:
compile_command += " -D_GLIBCXX_USE_CXX11_ABI=0"
os.system(compile_command)
setup(name='GPflow',
version=verstr,
author="James Hensman, Alex Matthews",
author_email="james.hensman@gmail.com",
description=("Gaussian process methods in tensorflow"),
license="BSD 3-clause",
keywords="machine-learning gaussian-processes kernels tensorflow",
url="http://github.com/gpflow/gpflow",
package_data={'GPflow': ['GPflow/tfops/*.so', 'GPflow/gpflowrc']},
include_package_data=True,
ext_modules=[],
packages=["GPflow"],
package_dir={'GPflow': 'GPflow'},
py_modules=['GPflow.__init__'],
test_suite='testing',
install_requires=['numpy>=1.9', 'scipy>=0.16', 'tensorflow>=0.11.0rc1', 'pandas>=0.18.1'],
classifiers=['License :: OSI Approved :: BSD License',
'Natural Language :: English',
'Operating System :: MacOS :: MacOS X',
'Operating System :: Microsoft :: Windows',
'Operating System :: POSIX :: Linux',
'Programming Language :: Python :: 2.7',
'Topic :: Scientific/Engineering :: Artificial Intelligence']
)
Computing file changes ...