GraphBuilder#
- class liesel.model.model.GraphBuilder(to_float32=True)[source]#
Bases:
object
A graph builder, used to set up a
Model
.Constructs a model containing all nodes and variables that were added to the graph builder and their recursive inputs.
Important
In
build_model()
, the graph builder will automatically find all inputs to its nodes - and the inputs to these inputs (i.e. it finds inputs recursively).The outputs of the nodes, however, are not added to the model automatically, so all root nodes need to be added explicitly.
Root nodes are nodes that are not inputs to any other node in the graph. The response in a regression model is an example of a root node.
The standard workflow is to create the nodes and variables, add the root var to a graph builder, and construct a model from the graph builder. After the model has been constructed, some methods of the graph builder are not available anymore, because the graph is considered static.
- Parameters:
to_float32 (
bool
) – Whether to convert the dtype of the values of the added nodes from float64 to float32. (default:True
)
See also
Model
The liesel model class, representing a static graph.
GraphBuilder.add()
Method for adding variables and nodes to the GraphBuilder.
GraphBuilder.build_model()
Method for building a model from the GraphBuilder.
Var.transform()
Transforms a variable by adding a new transformed variable as an input. This is useful for variables that are constrained to a certain domain, e.g. positive values.
Examples
We start by creating some variables:
>>> a = lsl.Var(1.0, name="a") >>> b = lsl.Var(2.0, name="b") >>> c = lsl.Var(lsl.Calc(lambda x, y: x + y, a, b), name="c")
We now initialize a GraphBuilder and add the root node
c
to it:>>> gb = lsl.GraphBuilder() >>> gb.add(c) GraphBuilder(0 nodes, 1 vars)
We are now ready to build the model:
>>> model = gb.build_model() >>> model Model(9 nodes, 3 vars)
Note that when
build_model()
is called, allweak
variables in the graph will be updated. So the value ofc
is now available:>>> c.value 3.0
The graph builder is now empty:
>>> gb.vars []
Methods
add
(*args[, to_float32])Adds nodes, variables or other graph builders to the graph.
add_groups
(*groups[, to_float32])Adds groups to the graph.
build_model
([copy])Builds a model from the graph.
convert_dtype
(from_dtype, to_dtype)Tries to convert the node values in the graph to the specified data type.
copy
()Returns a shallow copy of the graph builder.
Counts the number of times each node name occurs in the graph.
Counts the number of times each variable name occurs in the graph.
groups
()Collects the groups from all nodes and variables.
Plots all nodes in the graph.
Plots all variables in the graph.
rename
(pattern, replacement)Renames all nodes and variables in the graph.
rename_nodes
(pattern, replacement)Renames all nodes in the graph.
rename_vars
(pattern, replacement)Renames all variables in the graph.
replace_node
(old, new)Replaces the
old
with thenew
node.replace_var
(old, new)Replaces the
old
with thenew
variable.transform
(var[, bijector])Transforms a variable by adding a new transformed variable as an input.
update
()Updates all nodes in the graph.
Attributes
User-defined log-likelihood node, if there is one.
User-defined log-prior node, if there is one.
User-defined log-probability node, if there is one.
The nodes that were explicitly added to the graph.
The variables that were explicitly added to the graph.