Flatten.Graphmodule Neuron : Owl_neural_neuron_sig.Sigtype node = {mutable name : string;mutable prev : node array;mutable next : node array;mutable neuron : Neuron.neuron;mutable output : Neuron.Optimise.Algodiff.t option;mutable network : network;mutable train : bool;}and network = {mutable nnid : string;mutable size : int;mutable roots : node array;mutable outputs : node array;mutable topo : node array;}Type definition of a node and a neural network.
Create an empty neural network.
val make_node :
?name:string ->
?train:bool ->
node array ->
node array ->
Neuron.neuron ->
Neuron.Optimise.Algodiff.t option ->
network ->
nodeCreate a node in a neural network.
Get the neural network of a given node associated with.
Get the neural network associated with the given output nodes.
val get_network_name : network -> stringget_network_name n returns the name of the network n.
val set_network_name : network -> string -> unitset_network_name n s sets the name of the network n to s.
val collect_output : node array -> Neuron.Optimise.Algodiff.t arrayCollect the output values of given nodes.
val add_node :
?act_typ:Neuron.Activation.typ ->
network ->
node array ->
node ->
nodeAdd a node to the given network.
val input_shape : network -> int arrayGet input shape of a network (without batch dimension), i.e. shape of input neuron.
val input_shapes : network -> int array arrayGet input shapes of a network (without batch dimension), i.e. shape of input neurons.
val init : network -> unitInitialise the network.
val reset : network -> unitReset the network, i.e. all the parameters in the neurons.
val mktag : int -> network -> unitTag the neurons, used by Algodiff module.
val mkpar : network -> Neuron.Optimise.Algodiff.t array arrayCollect the parameters of neurons, used by Optimise module.
val mkpri : network -> Neuron.Optimise.Algodiff.t array arrayCollect the primal values of neurons, used by Optimise module.
val mkadj : network -> Neuron.Optimise.Algodiff.t array arrayCollect the adjacent values of neurons, used by Optimise module.
val update : network -> Neuron.Optimise.Algodiff.t array array -> unitUpdate the parameters of neurons, used by Optimise module.
val run : Neuron.Optimise.Algodiff.t -> network -> Neuron.Optimise.Algodiff.tExecute the computations in all the neurons in a network with the given input.
val run_inputs :
Neuron.Optimise.Algodiff.t array ->
network ->
Neuron.Optimise.Algodiff.t arrayExecute the computations in all the neurons in a network with the given inputs.
val forward :
network ->
Neuron.Optimise.Algodiff.t ->
Neuron.Optimise.Algodiff.t * Neuron.Optimise.Algodiff.t array arrayRun the forward pass of a network.
val forward_inputs :
network ->
Neuron.Optimise.Algodiff.t array ->
Neuron.Optimise.Algodiff.t array * Neuron.Optimise.Algodiff.t array arrayRun the forward pass of a network (multi-input/output version).
val backward :
network ->
Neuron.Optimise.Algodiff.t ->
Neuron.Optimise.Algodiff.t array array
* Neuron.Optimise.Algodiff.t array arrayRun the backward pass of a network.
val model :
network ->
Neuron.Optimise.Algodiff.A.arr ->
Neuron.Optimise.Algodiff.A.arrMake a deep copy of the given network, excluding the neurons marked with training = true.
val model_inputs :
network ->
Neuron.Optimise.Algodiff.A.arr array ->
Neuron.Optimise.Algodiff.A.arr arrayMake a deep copy of the given network, excluding the neurons marked with training = true.
val input : ?name:string -> int array -> nodeinput shape creates an input node for input data. Note that if your network has multiple inputs, you should use inputs instead.
Arguments: * shape: shape of input data.
val inputs : ?names:string array -> int array array -> node arrayinput shapes creates an array of input nodes for input data.
Arguments: * shapes: array of shapes of input data.
val activation : ?name:string -> Neuron.Activation.typ -> node -> nodeApplies an activation function to an output.
Arguments: * activation: name of activation function to use.
val linear :
?name:string ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int ->
node ->
nodelinear ?act_typ units node adds the regular densely-connected NN node to node.
Arguments: * units: Positive integer, dimensionality of the output space. * act_typ: Activation function to use.
val linear_nobias :
?name:string ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int ->
node ->
nodeSimilar to linear, but does not use the bias vector.
val embedding :
?name:string ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int ->
int ->
node ->
nodeCreate a node for embedding neuron.
val recurrent :
?name:string ->
?init_typ:Neuron.Init.typ ->
act_typ:Neuron.Activation.typ ->
int ->
int ->
node ->
nodeCreate a node for recurrent neuron.
val lstm : ?name:string -> ?init_typ:Neuron.Init.typ -> int -> node -> nodelstm units node adds a LSTM node on previous node.
Arguments: * units: Positive integer, dimensionality of the output space.
val gru : ?name:string -> ?init_typ:Neuron.Init.typ -> int -> node -> nodegru units node adds a Gated Recurrent Unit node on previous node.
Arguments: * units: Positive integer, dimensionality of the output space.
val conv1d :
?name:string ->
?padding:Owl_types.padding ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
node ->
nodeconv1d kernel stride node adds a 1D convolution node (e.g. temporal convolution) on previous node.
Arguments: * kernel: int array consists of h, i, o. h specifies the dimension of the 1D convolution window. i and o are the dimensionalities of the input and output space. * stride: int array of 1 integer.
val conv2d :
?name:string ->
?padding:Owl_types.padding ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
node ->
nodeconv2d kernel stride node adds a 2D convolution node (e.g. spatial convolution over images) on previous node.
Arguments: * kernel: int array consists of w, h, i, o. w and h specify the width and height of the 2D convolution window. i and o are the dimensionality of the input and output space. * stride: int array of 2 integers.
val conv3d :
?name:string ->
?padding:Owl_types.padding ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
node ->
nodeconv3d kernel stride node adds a 3D convolution node (e.g. spatial convolution over volumes) on previous node.
Arguments: * kernel: int array consists of w, h, d, i, o. w, h, and d specify the 3 dimensionality of the 3D convolution window. i and o are the dimensionality of the input and output space. * stride: int array of 3 integers.
val dilated_conv1d :
?name:string ->
?padding:Owl_types.padding ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
int array ->
node ->
nodedilated_conv1d kernel stride rate node adds a 1D dilated convolution node (e.g. temporal convolution) on previous node.
Arguments: * kernel: int array consists of h, i, o. h specifies the dimension of the 1D convolution window. i and o are the dimensionalities of the input and output space. * stride: int array of 1 integer. * rate: int array of 1 integer.
val dilated_conv2d :
?name:string ->
?padding:Owl_types.padding ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
int array ->
node ->
nodedilated_conv2d kernel stride rate node adds a 2D dilated convolution node (e.g. spatial convolution over images) on previous node.
Arguments: * kernel`: int array consists of w, h, i, o. w and h specify the width and height of the 2D convolution window. i and o`` are the dimensionality of the input and output space. * stride: int array of 2 integers. * rate: int array of 2 integers.
val dilated_conv3d :
?name:string ->
?padding:Owl_types.padding ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
int array ->
node ->
nodedilated_conv3d kernel stride rate node adds a 3D dilated convolution node (e.g. spatial convolution over volumes) on previous node.
Arguments: * kernel: int array consists of w, h, d, i, o. w, h, and d specify the 3 dimensionality of the 3D convolution window. i and o are the dimensionality of the input and output space. * stride: int array of 3 integers. * rate: int array of 3 integers.
val transpose_conv1d :
?name:string ->
?padding:Owl_types.padding ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
node ->
nodetranspose_conv1d kernel stride node adds a 1D transpose convolution node (e.g. temporal convolution) on previous node.
Arguments: * kernel: int array consists of h, i, o. h specifies the dimension of the 1D convolution window. i and o are the dimensionalities of the input and output space. * stride: int array of 1 integer.
val transpose_conv2d :
?name:string ->
?padding:Owl_types.padding ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
node ->
nodetranspose_conv2d kernel stride node adds a 2D transpose convolution node on previous node.
Arguments: * kernel: int array consists of w, h, i, o. w and h specify the width and height of the 2D convolution window. i and o are the dimensionality of the input and output space. * stride: int array of 2 integers.
val transpose_conv3d :
?name:string ->
?padding:Owl_types.padding ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
node ->
nodetranspose_conv3d kernel stride node adds a 3D transpose convolution node (e.g. spatial convolution over volumes) on previous node.
Arguments: * kernel: int array consists of w, h, d, i, o. w, h, and d specify the 3 dimensionality of the 3D convolution window. i and o are the dimensionality of the input and output space. * stride: int array of 3 integers.
val fully_connected :
?name:string ->
?init_typ:Neuron.Init.typ ->
?act_typ:Neuron.Activation.typ ->
int ->
node ->
nodefully_connected outputs node adds a fully connected node to node.
Arguments: * outputs: integer, the number of output units in the node.
val max_pool1d :
?name:string ->
?padding:Owl_types.padding ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
node ->
nodemax_pool1d ~padding ~act_typ pool_size stride node adds a max pooling operation for temporal data to node.
Arguments: * pool_size: Array of one integer, size of the max pooling windows. * stride: Array of one integer, factor by which to downscale.
val max_pool2d :
?name:string ->
?padding:Owl_types.padding ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
node ->
nodemax_pool2d ~padding ~act_typ pool_size stride node adds a max pooling operation for spatial data to node.
Arguments: * pool_size: Array of 2 integers, size of the max pooling windows. * stride: Array of 2 integers, factor by which to downscale.
val avg_pool1d :
?name:string ->
?padding:Owl_types.padding ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
node ->
nodeavg_pool1d ~padding ~act_typ pool_size stride node adds a average pooling operation for temporal data to node.
Arguments: * pool_size: Array of one integer, size of the max pooling windows. * stride: Array of one integer, factor by which to downscale.
val avg_pool2d :
?name:string ->
?padding:Owl_types.padding ->
?act_typ:Neuron.Activation.typ ->
int array ->
int array ->
node ->
nodeavg_pool2d ~padding ~act_typ pool_size stride node adds a average pooling operation for spatial data to node.
Arguments: * pool_size: Array of 2 integers, size of the max pooling windows. * stride: Array of 2 integers, factor by which to downscale.
val global_max_pool1d :
?name:string ->
?act_typ:Neuron.Activation.typ ->
node ->
nodeglobal_max_pool1d adds global max pooling operation for temporal data.
val global_max_pool2d :
?name:string ->
?act_typ:Neuron.Activation.typ ->
node ->
nodeglobal_max_poo2d global max pooling operation for spatial data.
val global_avg_pool1d :
?name:string ->
?act_typ:Neuron.Activation.typ ->
node ->
nodeglobal_avg_pool1d adds global average pooling operation for temporal data.
val global_avg_pool2d :
?name:string ->
?act_typ:Neuron.Activation.typ ->
node ->
nodeglobal_avg_poo2d global average pooling operation for spatial data.
val upsampling2d :
?name:string ->
?act_typ:Neuron.Activation.typ ->
int array ->
node ->
nodeupsampling2d ~act_typ size node adds a upsampling operation for spatial data to node.
Arguments: * size: array of two integers, namely the upsampling factors for columns and rows.
val padding2d :
?name:string ->
?act_typ:Neuron.Activation.typ ->
int array array ->
node ->
nodepadding2d ~act_typ padding node adds rows and columns of zeros at the top, bottom, left and right side of an image tensor.
Arguments: * padding: array of 2 arrays of 2 integers, interpreted as | [|top_pad; bottom_pad|]; [|left_pad; right_pad|]|.
dropout rate node applies Dropout to the input to prevent overfitting.
Arguments: * rate: float between 0 and 1. Fraction of the input units to drop.
gaussian_noise stddev node applies additive zero-centered Gaussian noise.
Arguments: * stddev: float, standard deviation of the noise distribution.
gaussian_dropout rate node applies multiplicative 1-centered Gaussian noise. Only active at training time.
Arguments: * rates: float, drop probability
alpha_dropout rate node applies Alpha Dropout to the input node. Only active at training time.
Arguments: * rates: float, drop probability
val normalisation :
?name:string ->
?axis:int ->
?training:bool ->
?decay:float ->
?mu:Neuron.Optimise.Algodiff.A.arr ->
?var:Neuron.Optimise.Algodiff.A.arr ->
node ->
nodenormalisation axis node normalise the activations of the previous node at each batch.
Arguments: * axis: Integer, the axis that should be normalised (typically the features axis). Default value is 0.
reshape target_shape node reshapes an output to a certain shape.
Arguments: * target_shape: target shape. Array of integers. Does not include the batch axis.
flatten node flattens the input. Does not affect the batch size.
slice node slices the input. Does not affect the batch size.
val lambda :
?name:string ->
?act_typ:Neuron.Activation.typ ->
?out_shape:int array ->
(Neuron.Optimise.Algodiff.t -> Neuron.Optimise.Algodiff.t) ->
node ->
nodelambda ?target_shape func node wraps arbitrary expression as a Node object.
Arguments: * func: The function to be evaluated. Takes input tensor as first argument. * target_shape: the shape of the tensor returned by func; set to the same as input shape if not specified.
val lambda_array :
?name:string ->
?act_typ:Neuron.Activation.typ ->
int array ->
(Neuron.Optimise.Algodiff.t array -> Neuron.Optimise.Algodiff.t) ->
node array ->
nodelambda_array target_shape func node wraps arbitrary expression as a Node object.
Arguments: * target_shape: the shape of the tensor returned by func. * func: The function to be evaluated. Takes input tensor array as first argument.
val add : ?name:string -> ?act_typ:Neuron.Activation.typ -> node array -> nodeNode that adds a list of inputs.
It takes as input an array of nodes, all of the same shape, and returns a single node (also of the same shape).
val mul : ?name:string -> ?act_typ:Neuron.Activation.typ -> node array -> nodeNode that multiplies (element-wise) a list of inputs.
It takes as input an array of nodes, all of the same shape, and returns a single node (also of the same shape).
val dot : ?name:string -> ?act_typ:Neuron.Activation.typ -> node array -> nodeNode that computes a dot product between samples in two nodes.
val max : ?name:string -> ?act_typ:Neuron.Activation.typ -> node array -> nodeNode that computes the maximum (element-wise) a list of inputs.
val average :
?name:string ->
?act_typ:Neuron.Activation.typ ->
node array ->
nodeNode that averages a list of inputs.
It takes as input an array of nodes, all of the same shape, and returns a single node (also of the same shape).
val concatenate :
?name:string ->
?act_typ:Neuron.Activation.typ ->
int ->
node array ->
nodeconcatenate axis nodes concatenates a array of nodes and return as a single node.
Arguments: * axis: Axis along which to concatenate.
val to_string : network -> stringConvert a neural network to its string representation.
val pp_network : Stdlib.Format.formatter -> network -> unitPretty printing function a neural network.
val print : network -> unitPrint the string representation of a neural network to the standard output.
val save : ?unsafe:bool -> network -> string -> unitSerialise a network and save it to the a file with the given name. Set the unsafe flag to true if network contains Lambda layer.
val load : string -> networkLoad the neural network from a file with the given name.
val save_weights : network -> string -> unitSave all the weights in a neural network to a file. The weights and the name of their associated neurons are saved as key-value pairs in a hash table.
val load_weights : network -> string -> unitLoad the weights from a file of the given name. Note that the weights and the name of their associated neurons are saved as key-value pairs in a hash table.
get_subnetwork ?copy ?make_inputs network output_names constructs a subnetwork of nodes on which output_names depend, replacing nodes with names in make_inputs with input nodes.
Arguments: copy: Whether to copy or reference the original node weights. Defaults to true. make_inputs: Names of nodes to use as inputs to the subnetwork. Defaults to ||, which uses the original inputs. nn: The neural network from which the subnetwork is constructed. output_names: Names of nodes to use as outputs.
val train_generic :
?state:Neuron.Optimise.Checkpoint.state ->
?params:Neuron.Optimise.Params.typ ->
?init_model:bool ->
network ->
Neuron.Optimise.Algodiff.t ->
Neuron.Optimise.Algodiff.t ->
Neuron.Optimise.Checkpoint.stateGeneric function of training a neural network.
val train :
?state:Neuron.Optimise.Checkpoint.state ->
?params:Neuron.Optimise.Params.typ ->
?init_model:bool ->
network ->
Neuron.Optimise.Algodiff.A.arr ->
Neuron.Optimise.Algodiff.A.arr ->
Neuron.Optimise.Checkpoint.stateTrain a neural network with various configurations.