Release notes for all past releases are available in the 'Releases' section of the GPflow GitHub Repo. HOWTO_RELEASE.md explains just that.
- <CAVEATS REGARDING THE RELEASE (BUT NOT BREAKING CHANGES).>
- <ADDING/BUMPING DEPENDENCIES SHOULD GO HERE>
- <INSERT MAJOR FEATURE HERE, USING MARKDOWN SYNTAX>
- <IF RELEASE CONTAINS MULTIPLE FEATURES FROM SAME AREA, GROUP THEM TOGETHER>
- <SIMILAR TO ABOVE SECTION, BUT FOR OTHER IMPORTANT CHANGES / BUG FIXES>
- <IF A CHANGE CLOSES A GITHUB ISSUE, IT SHOULD BE DOCUMENTED HERE>
This release contains contributions from:
, , , , ,
- <CAVEATS REGARDING THE RELEASE (BUT NOT BREAKING CHANGES).>
- <ADDING/BUMPING DEPENDENCIES SHOULD GO HERE>
- <INSERT MAJOR FEATURE HERE, USING MARKDOWN SYNTAX>
- <IF RELEASE CONTAINS MULTIPLE FEATURES FROM SAME AREA, GROUP THEM TOGETHER>
- <SIMILAR TO ABOVE SECTION, BUT FOR OTHER IMPORTANT CHANGES / BUG FIXES>
- <IF A CHANGE CLOSES A GITHUB ISSUE, IT SHOULD BE DOCUMENTED HERE>
This release contains contributions from:
, , , , ,
This release adds a utility function for converting tf.Modules to float32.
- Add the
freeze_as_float32utility function, which returns a frozen deepcopy of a module with all values converted to tf.float32.
This release contains contributions from:
uri-granta
This patch release adds support for Tensorflow 2.16.
- Support and test against Tensorflow 2.16. Note that (like tensorflow-probability) GPflow uses Keras 2. Since TF 2.16 defaults to Keras 3,
tf.kerasmust now be imported from thetf_keraspackage. Alternatively, you can importtf_kerasfrom thegpflow.kerasmodule, which will automatically select the right source depending on which version of TF is installed.
This release contains contributions from:
uri-granta
This patch release fixes a number of identified issues.
- Support pickling Scipy optimizers with a non-empty compile cache
- Allow setting a prior for A in the
Linearmean function - Avoid rounding small values in kernel summary printout
- Test against Tensorflow 2.15
This release contains contributions from:
JSchmiegel, uri-granta
This release adds caching of compiled graphs inside the Scipy optimizer, and adds support for returning loss history. It also adds supports for Python 3.11.
- Support returning loss history with Scipy optimizer.
- Scipy minimize wrapper caches compiled graphs and re-uses them if called with the same arguments.
This functionality can be disabled by setting the new
compile_cache_sizeargument to 0.
- Support and test with Python 3.11
- Test against a 'production' environment (in addition to 'min' and 'max' environments).
This release contains contributions from:
khurram-ghani, jesnie, uri-granta
A small fix to ensure support for (and testing with) TensorFlow 2.12.
- Support and test with TensorFlow 2.12
This release contains contributions from:
uri-granta
The main focus of this release is to provide users control over arguments for tf.function
compilation inside the Scipy minimize wrapper. It also adds support for a new categorical kernel.
- Added a new categorical kernel that implements categorical variables by mapping them to values in a latent space. (#2055)
- Added support for passing
tf.functionarguments for compilation ingpflow.optimizers.Scipy. (#2064) - Default lower bound for parameters of scalar likelihoods can now be set via configuration. (#1985, #2066)
- Fixed some notebook typos and a link. (#2052, #2057)
- Fixed missing docs for
SquaredExponentialandConstantkernels. (#2056, #2063)
This release contains contributions from:
sc336, partev, khurram-ghani, uri-granta, awav, jesnie
A small fix for a bug in the scipy optimize wrapper.
- None
- None
- None
- Patched
gpflow.optimizers.Scipyto always assign the last good state returned byscipy.optimize.minimizeto the model under optimization. Previously, this step could be missed ifminimizefailed in some situations, leaving the model in an arbitrary state.
This release contains contributions from:
Khurram Ghani
The main theme of this release is documentation, with a new suite of tutorials, several upgrades to notebooks and the removal of a rather annoying bug in the documentation site.
Perhaps more notably, check_shapes has been removed, and can now be found here. This change is breaking for those who are still getting check_shapes from gpflow, although being in experimental this change does not require a new version number.
gpflow.experimental.check_shapeshas been removed, in favour of an independent release. Usepip install check_shapesandimport check_shapesinstead.
- Major rework of documentation landing page and "getting started" section.
- Fixed bug related to
tf.saved_modeland methods wrapped in@check_shapes. - Documented monitoring with
Adamoptimizer. - Fixed bug related to switching versions in documentation site
- Fixed several issues relating to mypy
This release contains contributions from:
sc336, st--, sethaxen, jesnie
This is yet another bug-fix release.
- Fix to
to_default_floatto avoid losing precision when called with python floats.
This release contains contributions from:
ChrisMorter
This is yet another bug-fix release.
- Fix to
check_shapeshandling oftfp..._TensorCoercible.
This release contains contributions from:
jesnie
This is a bug-fix release, for compatibility with GPflux.
- Extract shapes of
tfp.python.layers.internal.distribution_tensor_coercible._TensorCoercible. - Allow
FallbackSeparateIndependentInducingVariablesto have children with different shapes. - Allow input and output batches on
GaussianQuadratureto be different.
This release contains contributions from:
jesnie
This is a bug-fixes release, due to problems with model saving in 2.6.0.
- Removed
gpflow.utilities.ops.cast. Usetf.castinstead.
- Fixed bug related to
tf.saved_modeland methods wrapped in@check_shapes. - Some documentation formatting fixes.
This release contains contributions from:
jesnie
The major theme for this release is heteroskedastic likelihoods. Changes have unfortunately caused some breaking changes, but makes it much easier to use heteroskedastic likelihoods, either by plugging together built-in GPflow classes, or when writing your own. See our updated notebook, for examples on how to use this.
- All likelihood methods now take an extra
Xargument. If you have written custom likelihoods or you have custom code calling likelihoods directly you will need to add this extra argument. - On the
CGLBmodel thexnewparameters has changed name toXnew, to be consistent with the other models. - On the
GPLVMmodel the variance returned bypredict_fwithfull_cov=Truehas changed shape from[batch..., N, N, P]to[batch..., P, N, N]to be consistent with the other models. gpflow.likelihoods.Gaussian.DEFAULT_VARIANCE_LOWER_BOUNDhas been replaced withgpflow.likelihoods.scalar_continuous.DEFAULT_LOWER_BOUND.- Change to
InducingVariablesAPI.InducingVariablesmust now have ashapeproperty. gpflow.experimental.check_shapes.get_shape.registerhas been replaced withgpflow.experimental.check_shapes.register_get_shape.check_shapeswill no longer automatically wrap shape checking intf.compat.v1.flags.tf_decorator.make_decorator. This is likely to affect you if you usecheck_shapeswith custom Keras models. If you require the decorator you can manually enable it withcheck_shapes(..., tf_decorator=True).
- Shape checking is now, by default, disabled within
tf.function. Useset_enable_check_shapesto change this behaviour. See the API documentation for more details.
- Improved handling of variable noise
- All likelihood methods now take an
Xargument, allowing you to easily implement heteroskedastic likelihoods. - The
Gaussianlikelihood can now be parametrized by either avarianceor ascale - Some existing likelihoods can now take a function (of X) instead of a parameter, allowing them
to become heteroskedastic. The parameters are:
GaussianvarianceGaussianscaleStudentTscaleGammashapeBetascale
- The
GPRandSGPRcan now be configured with a custom Gaussian likelihood, allowing you to make them heteroskedastic. - See the updated notebook.
gpflow.mean_functionshas been renamedgpflow.functions, but with an alias, to avoid breaking changes.
- All likelihood methods now take an
gpflow.experimental.check_shapes- Can now be in three different states - ENABLED, EAGER_MODE_ONLY, and DISABLE. The default is EAGER_MODE_ONLY, which only performs shape checks when the code is not compiled. Compiling the shape checking code is a major bottleneck and this provides a significant speed-up for performance sensitive parts of the code.
- Now supports multiple variable-rank dimensions at the same time, e.g.
cov: [n..., n...]. - Now supports single broadcast dimensions to have size 0 or 1, instead of only 1.
- Now supports variable-rank dimensions to be broadcast, even if they're not leading.
- Now supports
is Noneandis not Noneas checks for conditional shapes. - Now uses custom function
register_get_shapeinstead ofget_shape.register, for better compatibility with TensorFlow. - Now supports checking the shapes of
InducingVariables. - Now adds documentation to function arguments that has declared shapes, but no other documentation.
- All of GPflow is now consistently shape-checked.
- All built-in kernels now consistently support broadcasting.
- Tested with TensorFlow 2.10.
- Add support for Apple Silicon Macs (
arm64) via thetensorflow-macosdependency. (#1850) - New implementation of GPR and SGPR posterior objects. This primarily improves numerical stability.
(#1960)
- For the GPR this is also a speed improvement when using a GPU.
- For the SGPR this is a mixed bag, performance-wise.
- Improved checking and error reporting for the models than do not support
full_covandfull_output_cov. - Documentation improvements:
- Improved MCMC notebook.
- Deleted notebooks that had no contents.
- Fixed some broken formatting.
This release contains contributions from:
jesnie, corwinpro, st--, vdutor
This release fixes a performance regression introduced in 2.5.0. 2.5.0 used features of Python
that tensorfow < 2.9.0 do not know how to compile, which negatively impacted performance.
- Fixed some bugs that prevented TensorFlow compilation and had negative performance impact. (#1882)
- Various improvements to documentation. (#1875, #1866, #1877, #1879)
This release contains contributions from:
jesnie
Fix problem with release process of 2.5.0.
- Fix bug in release process.
This release contains contributions from:
jesnie
The focus of this release has mostly been bumping the minimally supported versions of Python and
TensorFlow; and development of gpflow.experimental.check_shapes.
- Dropped support for Python 3.6. New minimum version is 3.7. (#1803, #1859)
- Dropped support for TensorFlow 2.2 and 2.3. New minimum version is 2.4. (#1803)
- Removed sub-package
gpflow.utilities.utilities. It was scheduled for deletion in2.3.0. Usegpflow.utilitiesinstead. (#1804) - Removed method
Likelihood.predict_density, which has been deprecated since March 24, 2020. (#1804) - Removed property
ScalarLikelihood.num_gauss_hermite_points, which has been deprecated since September 30, 2020. (#1804)
- Further improvements to type hints - this may reveal new problems in your code-base if
you use a type checker, such as
mypy. (#1795, #1799, #1802, #1812, #1814, #1816)
-
Significant work on
gpflow.experimental.check_shapes.- Support anonymous dimensions. (#1796)
- Add a hook to let the user register shapes for custom types. (#1798)
- Support
Optionalvalues. (#1797) - Make it configurable. (#1810)
- Add accesors for setting/getting previously applied checks. (#1815)
- Much improved error messages. (#1822)
- Add support for user notes on shapes. (#1836)
- Support checking all elements of collections. (#1840)
- Enable stand-alone shape checking, without using a decorator. (#1845)
- Support for broadcasts. (#1849)
- Add support for checking the shapes of intermediate computations. (#1853)
- Support conditional shapes. (#1855)
-
Significant speed-up of the GPR posterior objects. (#1809, #1811)
-
Significant improvements to documentation. Note the new home page: https://gpflow.github.io/GPflow/index.html (#1828, #1829, #1830, #1831, #1833, #1841, #1842, #1856, #1857)
- Minor improvement to code clarity (variable scoping) in SVGP model. (#1800)
- Improving mathematical formatting in docs (SGPR derivations). (#1806)
- Allow anisotropic kernels to have negative length-scales. (#1843)
This release contains contributions from:
ltiao, uri.granta, frgsimpson, st--, jesnie
This release mostly focuses on make posterior objects useful for Bayesian Optimisation.
It also adds a new experimetal sub-package, with a tool for annotating tensor shapes.
-
Slight change to the API of custom posterior objects.
gpflow.posteriors.AbstractPosterior._precomputeno longer must return analphaand anQinv- instead it returns any arbitrary tuple ofPrecomputedValues. Correspondinglygpflow.posteriors.AbstractPosterior._conditional_with_precomputeshould no longer try to accessself.alphaandself.Qinv, but instead is passed the tuple of tensors returned by_precompute, as a parameter. (#1763, #1767) -
Slight change to the API of inducing points. You should no longer override
gpflow.inducing_variables.InducingVariables.__len__. Overridegpflow.inducing_variables.InducingVariables.num_inducinginstead.num_inducingshould return atf.Tensorwhich is consistent with previous behaviour, although the type previously was annotated asint.__len__has been deprecated. (#1766, #1792)
- Type hints have been added in several places - this may reveal new problems in your code-base if
you use a type checker, such as
mypy. (#1766, #1769, #1771, #1773, #1775, #1777, #1780, #1783, #1787, #1789)
-
Add new posterior class to enable faster predictions from the VGP model. (#1761)
-
VGP class bug-fixed to work with variable-sized data. Note you can use
gpflow.models.vgp.update_vgp_datato ensure variational parameters are updated sanely. (#1774). -
All posterior classes bug-fixed to work with variable data sizes, for Bayesian Optimisation. (#1767)
-
Added
experimentalsub-package for features that are still under developmet.- Added
gpflow.experimental.check_shapesfor checking tensor shapes. (#1760, #1768, #1782, #1785, #1788)
- Added
- Make
dataclassesdependency conditional at install time. (#1759) - Simplify calculations of some
predict_f. (#1755)
This release contains contributions from:
jesnie, tmct, joacorapela
This is a bug-fix release, primarily for the GPR posterior object.
-
GPR posterior
- Fix the calculation in the GPR posterior object (#1734).
- Fixes leading dimension issues with
GPRPosterior._conditional_with_precompute()(#1747).
-
Make
gpflow.optimizers.Scipyable to handle unused / unconnected variables. (#1745). -
Build
- Fixed broken CircleCi build (#1738).
- Update CircleCi build to use next-gen Docker images (#1740).
- Fixed broken triggering of docs generation (#1744).
- Make all slow tests depend on fast tests (#1743).
- Make
make dev-installalso install the test requirements (#1737).
-
Documentation
- Fixed broken link in
README.md(#1736). - Fix broken build of
cglb.ipynb(#1742). - Add explanation of how to run notebooks locally (#1729).
- Fix formatting in notebook on Heteroskedastic Likelihood (#1727).
- Fix broken link in introduction (#1718).
- Fixed broken link in
-
Test suite
- Amends
test_gpr_posterior.pyso it will cover leading dimension uses.
- Amends
This release contains contributions from:
st--, jesnie, johnamcleod, Andrew878
- Refactor posterior base class to support other model types. (#1695)
- Add new posterior class to enable faster predictions from the GPR/SGPR models. (#1696, #1711)
- Construct Parameters from other Parameters and retain properties. (#1699)
- Add CGLB model (#1706)
- Fix unit test failure when using TensorFlow 2.5.0 (#1684)
- Upgrade black formatter to version 20.8b1 (#1694)
- Remove erroneous DeprecationWarnings (#1693)
- Fix SGPR derivation (#1688)
- Fix tests which fail with TensorFlow 2.6.0 (#1714)
This release contains contributions from:
johnamcleod, st--, Andrew878, tadejkrivec, awav, avullo
Bugfix for creating the new posterior objects with PrecomputeCacheType.VARIABLE.
The main focus of this release is the new "Posterior" object introduced by
PR #1636, which allows for a significant speed-up of post-training predictions
with the SVGP model (partially resolving #1599).
- For end-users, by default nothing changes; see Breaking Changes below if you
have written your own implementations of
gpflow.conditionals.conditional. - After training an
SVGPmodel, you can callmodel.posterior()to obtain a Posterior object that precomputes all quantities not depending on the test inputs (e.g. Choleskty of Kuu), and provides aposterior.predict_f()method that reuses these cached quantities.model.predict_f()computes exactly the same quantities as before and does not give any speed-up. gpflow.conditionals.conditional()forwards to the same "fused" code-path as before.
gpflow.conditionals.conditional.registeris deprecated and should not be called outside of the GPflow core code. If you have written your own implementations ofgpflow.conditionals.conditional(), you have two options to use your code with GPflow 2.2:- Temporary work-around: Instead of
gpflow.models.SVGP, use the backwards-compatiblegpflow.models.svgp.SVGP_deprecated. - Convert your conditional() implementation into a subclass of
gpflow.posteriors.AbstractPosterior, and registerget_posterior_class()instead (see the "Variational Fourier Features" notebook for an example).
- Temporary work-around: Instead of
- The Posterior object is currently only available for the
SVGPmodel. We would like to extend this to the other models such asGPR,SGPR, orVGP, but this effort is beyond what we can currently provide. If you would be willing to contribute to those efforts, please get in touch! - The Posterior object does not currently provide the
GPModelconvenience functions such aspredict_f_samples,predict_y,predict_log_density. Again, if you're willing to contribute, get in touch!
This release contains contributions from:
stefanosele, johnamcleod, st--
- GPflow requires TensorFlow >= 2.2.
- The
gpflow.utilities.utilitiessubmodule has been deprecated and will be removed in GPflow 2.3. User code should access functions directly throughgpflow.utilitiesinstead (#1650).
- Improves compatibility between monitoring API and Scipy optimizer (#1642).
- Adds
_add_noise_covmethod to GPR model class to make it more easily extensible (#1645).
-
Fixes a bug in ModelToTensorBoard (#1619) when
max_size=-1(#1619) -
Fixes a dynamic shape issue in the quadrature code (#1626).
-
Fixes #1651, a bug in
fully_correlated_conditional_repeat(#1652). -
Fixes #1653, a bug in the "fallback" code path for multioutput Kuf (#1654).
-
Fixes a bug in the un-whitened code path for the fully correlated conditional function (#1662).
-
Fixes a bug in
independent_interdomain_conditional(#1663). -
Fixes an issue with the gpflow.config API documentation (#1664).
-
Test suite
- Fixes the test suite for TensorFlow 2.4 / TFP 0.12 (#1625).
- Fixes mypy call (#1637).
- Fixes a bug in test_method_equivalence.py (#1649).
This release contains contributions from:
johnamcleod, st--, vatsalaggarwal, sam-willis, vdutor