This version of greta uses Tensorflow 2.0.0, which comes with it a host of new very exciting features!
The latest interface to optimizers in tensorflow are now used, these changes are described.
gradient_descent
gains momentum
and nesterov
arguments, as described here in TF docsadagrad
gains epsilon
argumentmomentum
optimizer, as this has been folded into gradient_descent
argumentsamsgrad
argument to adam
optimizer, as described in TF docsadamax
optimiser, see TF docsl2_shrinkage_regularization_strength
and beta
arguments to ftrl
optimiser.nadam
optimiser - see docs.rms_prop
optimiser, changes decay
parameter to rho
, and adds centered
parameter - see docsThe following optimisers are removed, as they are no longer supported by Tensorflow:
powell()
cg()
newton_cg()
l_bfgs_b()
tnc()
cobyla()
slsqp()
This release provides a few improvements to installation in greta. It should now provide more information about installation progress, and be more robust. The intention is, it should just work, and if it doesn't, it should fail gracefully with some useful advice on problem solving.
library(greta)
after installation (#523).greta_deps_sepc()
to help simplify specifying package versions (#664).method
and conda
arguments from install_greta_deps()
as they
were not used.manual
argument in install_greta_deps()
.greta_deps_receipt()
to list the current main python packages installed (#668).greta_deps_tf_tfp
(#666), which contains valid versions combinations of TF, TFP, and Python.greta_nodes_install/conda_*()
options as #493 makes them defunct.greta_set_install_logfile()
, and write_greta_install_log()
, and open_greta_install_log()
(#493).destroy_greta_deps()
function to remove miniconda and python conda environment.write_greta_install_log()
and open_greta_install_log()
to use tools::R_user_dir()
to always write to a file location. open_greta_install_log()
will open one found from an environment variable or go to the default location (#703).greta_mcmc_list
. This means MCMC output will be shorter and more informative (#644).n
argument: print(object, n = <elements to print>)
(#644).greta_sitrep()
now checks for installations of Python, TF, and TFP.is.greta_array()
and is.greta_mcmc_list()
.restart
argument for install_greta_deps()
and reinstall_greta_deps()
to automatically restart R (#523).check_*
functions.cli::cli_abort/warn/inform()
in place of cli::format_error/warning/message()
+ stop/warning/message(msg, call. = FALSE)
pattern.tf$keras$optimizers$legacy$METHOD
over tf$keras$optimizers$METHOD
). No user impact expected.%||%
internally to replace the pattern: if (is.null(x)) x <- thing
with x <- x %||% thing
(#630).if (thing & thing & what == this)
with if (explanation_of_thing)
.vapply
into functions (#377, #658)..deps_tf
and .deps_tfp
to track dependencies of TF and TFP. Related to #666.forward_log_det_jacobian()
function from tf_correlation_cholesky_bijector()
(used in lkj_correlation()
). Previously, it did not work with unknown dimensions, but it now works with them.tf$matmul(chol_draws, chol_draws, adjoint_b = TRUE)
instead of tf_chol2symm(chol_draws)
.FillTriangular
with FillScaleTriL
and apply Chaining to first transpose input.reinstall_greta_deps()
, which helps with starting from a clean slate when installing greta dependencies (#524)future
and parallely
packages error when a CPU with only one core is provided (#513, #516).multiprocess
as it is deprecated in the future
package (#394)Python is now initialised when a greta_array
is created (#468).
head and tail S3 methods for greta_array
are now consistent with head and tail methods for R versions 3 and 4 (#384).
greta_mcmc_list
objects (returned by mcmc()
) are now no longer modified by operations (like coda::gelman.diag()
).
joint distributions of uniform variables now have the correct constraints when sampling (#377).
array-scalar dispatch with 3D arrays is now less buggy (#298).
greta
now provides R versions of all of R's primitive functions (I think), to prevent them from silently not executing (#317).
Uses Sys.unsetenv("RETICULATE_PYTHON")
in .onload
on package startup,
to prevent an issue introduced with the "ghost orchid" version of RStudio where they do not find the current version of RStudio. See #444 for more details.
Internal change to code to ensure future
continues to support parallelisation of chains. See #447 for more details.
greta
now depends on future
version 1.22.1, tensorflow
(the R package) 2.7.0, and parallelly
1.29.0. This should see no changes on the user side.
Now depends on R >= 3.1.0 (#386)
chol2inv.greta_array()
now warns user about LINPACK argument being ignored, and also reminds user it has been deprecated since R 3.1
calculate()
now accepts multiple greta arrays for which to calculate values, via the ...
argument. As a consequence any other arguments must now be named.
A number of optimiser methods are now deprecated, since they will be unavailable when greta moves to using TensorFlow v2.0: powell()
, cg()
, newton_cg()
, l_bfgs_b()
, tnc()
, cobyla()
, and slsqp()
.
dirichlet()
now returns a variable (rather than an operation) greta array, and the graphs created by lkj_correlation()
and wishart()
are now simpler as cholesky-shaped variables are now available internally.
Adds the reinstall_greta_env()
, reinstall_miniconda()
, remove_greta_env()
, and remove_miniconda()
helper functions for helping installation get to "clean slate" (#443).
greta
currently doesn't work on Apple Silicon (M1 Macs) as they need to use TF 2.0, which is currently being implemented. greta
now throws an error if M1 macs are detected and directs users to https://github.com/greta-dev/greta/issues/458 (#487)
New install_greta_deps()
- provides installation of python dependencies (#417). This saves exact versions of Python (3.7), and the python modules NumPy (1.16.4), Tensorflow (1.14.0), and Tensorflow Probability (0.7.0) into a conda environment, "greta-env". When initialising Python, greta now searches for this conda environment first, which presents a great advantage as it isolates these exact versions of these modules from other Python installations. It is not required to use the conda environment, "greta-env". Overall this means that users can run the function install_greta_deps()
, follow the prompts, and have all the python modules they need installed, without contaminating other software that use different python modules.
calculate()
now enables simulation of greta array values from their priors, optionally conditioned on fixed values or posterior samples. This enables prior and posterior predictive checking of models, and simulation of data.
A simulate()
method for greta models is now also provided, to simulate the values of all greta arrays in a model from their priors.
variable()
now accepts arrays for upper
and lower
, enabling users to define variables with different constraints.
There are three new variable constructor functions: cholesky_variable()
, simplex_variable()
, and ordered_variable()
, for variables with these constraints but no probability distribution.
New chol2symm()
is the inverse of chol()
.
mcmc()
, stashed_samples()
, and calculate()
now return objects of class greta_mcmc_list
which inherit from coda
's mcmc.list
class, but enable custom greta methods for manipulating mcmc outputs, including a window()
function.
mcmc()
and calculate()
now have a trace_batch_size
argument enabling users to trade-off computation speed versus memory requirements when calculating posterior samples for target greta arrays (#236).
Many message, warning, and error prompts have been replaced internally with the {cli} R package for nicer printing. This is a minor change that should result in a more pleasant user experience (#423 #425).
Internally, where sensible, greta
now uses the glue
package to create messages/ouputs (#378).
New FAQ page and updated installation instructions for installing Python dependencies (#424)
New greta_sitrep()
function to generate a situation report of the software
that is available for use, and also initialising python so greta
is ready to
use. (#441)
This release is predominantly a patch to make greta work with recent versions of TensorFlow and TensorFlow Probability, which were not backward compatible with the versions on which greta previously depended. From this release forward, greta will depend on specific (rather than minimum) versions of these two pieces of software to avoid it breaking if more changes are made to the APIS of these packages.
greta now (only) works with TensorFlow 1.14.0 and TensorFlow Probability 0.7.0 (#289, #290)
behaviour of the pb_update
argument to mcmc()
has been changed slightly to avoid a bad interaction with thinning (#284)
various edits to the documentation to fix spelling mistakes and typos
This is a very large update which adds a number of features and major speed improvements. We now depend on the TensorFlow Probability Python package, and use functionality in that package wherever possible. Sampling a simple model now takes ~10s, rather than ~2m (>10x speedup).
dim<-()
now always rearranges elements in column-major order (R-style, not Python-style)future
package for execution of MCMC chains on remote machines. Note: it is not advised to use future
for parallel execution of chains on the same machine, that is now automatically handled by greta.one_by_one
argument to MCMC can handle serious numerical errors (such as failed matrix inversions) as 'bad' samplesextra_samples()
function to continue sampling from a model.calculate()
works on the output of MCMC, to enable post-hoc posterior predictionmixture()
and joint()
distribution constructorsabind()
, aperm()
, apply()
, chol2inv()
, cov2cor()
, eigen()
, identity()
, kronecker()
, rdist()
, and tapply()
(thanks to @jdyen)greta_array()
opt()
and mcmc()
as objects, with defined tuning parameters. The control
argument to these functions is now defunct.x[2, 3]
, rather than x.6
)plot.greta_model()
now returns a DiagrammeR::grViz
object (thanks to @flyaflya). This is less modifiable, but renders the plot more much consistently across different environments and notebook types. The DiagrammeR
dgr_graph
object use to create the grViz
object is included as an attribute of this object, named "dgr_graph"
.Minor patch to handle an API change in the progress package. No changes in functionality.
model()
, %*%
<-
for assignmentn_cores
argument to model()
calculate()
function to compute the values of greta arrays conditional on provided values for othersimultilogit()
transformchains
argument to model()
cumsum()
and cumprod()
functionsforwardsolve()
and backsolve()
colSums()
, rowSums()
, colMeans()
, and rowMeans()
dim<-()
to reshape greta arrayssweep()
now handles greta array STATS
when x
is numeric.internals
object to enable extension packagesAPI changes:
define_model()
, an alias for model()