Skip to content

mod_neural_network

Lines: 391 | Visibility: private

Implementation of a feed-forward neural network including backpropagation. author: Jonas Finkler, Alexander Knoll, Moritz R. Schaefer, Marco Eckhoff

Dependencies

Uses

module~~mod_neural_network~~UsesGraph module~mod_neural_network mod_neural_network module~mod_activationfunctions mod_activationfunctions module~mod_neural_network->module~mod_activationfunctions module~mod_decorations mod_decorations module~mod_neural_network->module~mod_decorations module~mod_io mod_io module~mod_neural_network->module~mod_io module~mod_layers mod_layers module~mod_neural_network->module~mod_layers module~mod_optional_args mod_optional_args module~mod_neural_network->module~mod_optional_args module~mod_precision mod_precision module~mod_neural_network->module~mod_precision module~mod_random mod_random module~mod_neural_network->module~mod_random module~mod_throw mod_throw module~mod_neural_network->module~mod_throw module~mod_activationfunctions->module~mod_throw module~mod_activationfunction_abstract mod_activationfunction_abstract module~mod_activationfunctions->module~mod_activationfunction_abstract module~mod_activationfunction_linear mod_activationfunction_linear module~mod_activationfunctions->module~mod_activationfunction_linear module~mod_activationfunction_relu mod_activationfunction_relu module~mod_activationfunctions->module~mod_activationfunction_relu module~mod_activationfunction_sigmoid mod_activationfunction_sigmoid module~mod_activationfunctions->module~mod_activationfunction_sigmoid module~mod_activationfunction_softplus mod_activationfunction_softplus module~mod_activationfunctions->module~mod_activationfunction_softplus module~mod_activationfunction_square mod_activationfunction_square module~mod_activationfunctions->module~mod_activationfunction_square module~mod_activationfunction_stanh mod_activationfunction_stanh module~mod_activationfunctions->module~mod_activationfunction_stanh module~mod_activationfunction_tanh mod_activationfunction_tanh module~mod_activationfunctions->module~mod_activationfunction_tanh module~mod_decorations->module~mod_io module~mod_decorations->module~mod_precision module~mod_decorations->module~mod_throw module~mod_io->module~mod_optional_args module~mod_io->module~mod_precision iso_fortran_env iso_fortran_env module~mod_io->iso_fortran_env module~mod_dense_layer mod_dense_layer module~mod_layers->module~mod_dense_layer module~mod_dense_layer_with_single_activations mod_dense_layer_with_single_activations module~mod_layers->module~mod_dense_layer_with_single_activations module~mod_input_layer mod_input_layer module~mod_layers->module~mod_input_layer module~mod_input_layer_with_activations mod_input_layer_with_activations module~mod_layers->module~mod_input_layer_with_activations iso_c_binding iso_c_binding module~mod_precision->iso_c_binding module~mod_precision->iso_fortran_env module~mod_random->module~mod_precision module~mod_constants mod_constants module~mod_random->module~mod_constants module~mod_throw->module~mod_io module~mod_throw->module~mod_precision module~mod_throw->iso_c_binding module~mod_throw->iso_fortran_env module~mod_mpi mod_mpi module~mod_throw->module~mod_mpi module~mod_sort mod_sort module~mod_throw->module~mod_sort module~mod_activationfunction_linear->module~mod_precision module~mod_activationfunction_linear->module~mod_activationfunction_abstract module~mod_activationfunction_relu->module~mod_precision module~mod_activationfunction_relu->module~mod_activationfunction_abstract module~mod_activationfunction_sigmoid->module~mod_precision module~mod_activationfunction_sigmoid->module~mod_activationfunction_abstract module~mod_activationfunction_softplus->module~mod_precision module~mod_activationfunction_softplus->module~mod_activationfunction_abstract module~mod_activationfunction_square->module~mod_precision module~mod_activationfunction_square->module~mod_activationfunction_abstract module~mod_activationfunction_stanh->module~mod_precision module~mod_activationfunction_stanh->module~mod_activationfunction_abstract module~mod_activationfunction_tanh->module~mod_precision module~mod_activationfunction_tanh->module~mod_activationfunction_abstract module~mod_constants->module~mod_precision module~mod_constants->iso_c_binding module~mod_dense_layer->module~mod_activationfunctions module~mod_dense_layer->module~mod_decorations module~mod_dense_layer->module~mod_io module~mod_dense_layer->module~mod_optional_args module~mod_dense_layer->module~mod_precision module~mod_dense_layer->module~mod_random module~mod_dense_layer->module~mod_throw module~mod_dense_layer->module~mod_constants module~mod_global_warning mod_global_warning module~mod_dense_layer->module~mod_global_warning module~mod_initialize_array mod_initialize_array module~mod_dense_layer->module~mod_initialize_array module~mod_linalg mod_linalg module~mod_dense_layer->module~mod_linalg module~mod_nan_check mod_nan_check module~mod_dense_layer->module~mod_nan_check module~mod_dense_layer_with_single_activations->module~mod_activationfunctions module~mod_dense_layer_with_single_activations->module~mod_decorations module~mod_dense_layer_with_single_activations->module~mod_io module~mod_dense_layer_with_single_activations->module~mod_precision module~mod_dense_layer_with_single_activations->module~mod_throw module~mod_dense_layer_with_single_activations->module~mod_dense_layer module~mod_dense_layer_with_single_activations->module~mod_global_warning module~mod_dense_layer_with_single_activations->module~mod_linalg module~mod_input_layer->module~mod_decorations module~mod_input_layer->module~mod_io module~mod_input_layer->module~mod_precision module~mod_input_layer->module~mod_throw module~mod_input_layer->module~mod_constants module~mod_input_layer_with_activations->module~mod_activationfunctions module~mod_input_layer_with_activations->module~mod_decorations module~mod_input_layer_with_activations->module~mod_io module~mod_input_layer_with_activations->module~mod_precision module~mod_input_layer_with_activations->module~mod_throw module~mod_input_layer_with_activations->module~mod_input_layer module~mod_input_layer_with_activations->module~mod_global_warning module~mod_mpi->module~mod_precision mpi_f08 mpi_f08 module~mod_mpi->mpi_f08 module~mod_sort->module~mod_precision module~mod_global_warning->module~mod_io module~mod_global_warning->module~mod_throw module~mod_abstract_warning mod_abstract_warning module~mod_global_warning->module~mod_abstract_warning module~mod_initialize_array->module~mod_io module~mod_initialize_array->module~mod_precision module~mod_initialize_array->module~mod_random module~mod_initialize_array->module~mod_throw module~mod_initialize_array->module~mod_mpi module~mod_parameter_file mod_parameter_file module~mod_initialize_array->module~mod_parameter_file module~mod_linalg->module~mod_precision module~mod_linalg->module~mod_throw module~cublas_wrapper cublas_wrapper module~mod_linalg->module~cublas_wrapper module~mod_settings mod_settings module~mod_linalg->module~mod_settings module~mod_nan_check->module~mod_io module~mod_nan_check->module~mod_precision module~mod_nan_check->module~mod_throw ieee_arithmetic ieee_arithmetic module~mod_nan_check->ieee_arithmetic module~cublas_wrapper->iso_c_binding module~cublas_wrapper->module~mod_settings module~mod_parameter_file->module~mod_io module~mod_parameter_file->module~mod_precision module~mod_parameter_file->module~mod_throw module~mod_parameter_file->module~mod_nan_check module~mod_abstract_broadcast_file mod_abstract_broadcast_file module~mod_parameter_file->module~mod_abstract_broadcast_file module~mod_settings->module~mod_io module~mod_settings->module~mod_precision module~mod_settings->module~mod_throw module~mod_settings->module~mod_constants module~mod_cpu_vendor mod_cpu_vendor module~mod_settings->module~mod_cpu_vendor module~mod_periodic_table mod_periodic_table module~mod_settings->module~mod_periodic_table module~mod_abstract_broadcast_file->module~mod_io module~mod_abstract_broadcast_file->module~mod_throw module~mod_abstract_broadcast_file->module~mod_mpi module~mod_genericfile mod_genericfile module~mod_abstract_broadcast_file->module~mod_genericfile module~mod_sanitize mod_sanitize module~mod_abstract_broadcast_file->module~mod_sanitize module~mod_cpu_vendor->iso_c_binding module~mod_periodic_table->module~mod_io module~mod_periodic_table->module~mod_precision module~mod_periodic_table->module~mod_throw module~mod_periodic_table->module~mod_constants module~mod_array_helpers mod_array_helpers module~mod_periodic_table->module~mod_array_helpers module~mod_array_helpers->module~mod_precision module~mod_array_helpers->module~mod_throw module~mod_genericfile->module~mod_io module~mod_genericfile->module~mod_throw module~mod_genericfile->module~mod_mpi module~mod_sanitize->module~mod_throw

Used By

module~~mod_neural_network~~UsedByGraph module~mod_neural_network mod_neural_network module~mod_hdnn mod_hdnn module~mod_hdnn->module~mod_neural_network module~mod_initialize mod_initialize module~mod_initialize->module~mod_hdnn module~mod_predict_mode mod_predict_mode module~mod_predict_mode->module~mod_initialize module~mod_write_outfiles mod_write_outfiles module~mod_predict_mode->module~mod_write_outfiles module~mod_runner_interface_bindings mod_runner_interface_bindings module~mod_runner_interface_bindings->module~mod_initialize module~mod_train_energy_multiple_structures mod_train_energy_multiple_structures module~mod_train_energy_multiple_structures->module~mod_initialize module~mod_train_forces_multiple_structures mod_train_forces_multiple_structures module~mod_train_forces_multiple_structures->module~mod_initialize module~mod_train_forces_multiple_structures->module~mod_train_energy_multiple_structures module~mod_train_loop_4g_charges mod_train_loop_4g_charges module~mod_train_loop_4g_charges->module~mod_initialize module~mod_cost_calculator mod_cost_calculator module~mod_train_loop_4g_charges->module~mod_cost_calculator module~mod_output_files_and_cost_4g_charges mod_output_files_and_cost_4g_charges module~mod_train_loop_4g_charges->module~mod_output_files_and_cost_4g_charges module~mod_train_loop_atomic_property mod_train_loop_atomic_property module~mod_train_loop_atomic_property->module~mod_initialize module~mod_train_loop_atomic_property->module~mod_cost_calculator module~mod_output_files_and_cost mod_output_files_and_cost module~mod_train_loop_atomic_property->module~mod_output_files_and_cost module~mod_train_loop_short_range mod_train_loop_short_range module~mod_train_loop_short_range->module~mod_initialize module~mod_train_loop_short_range->module~mod_train_energy_multiple_structures module~mod_train_loop_short_range->module~mod_train_forces_multiple_structures module~mod_train_loop_short_range->module~mod_cost_calculator module~mod_train_loop_short_range->module~mod_output_files_and_cost module~mod_output_files_and_cost_4g_short_range mod_output_files_and_cost_4g_short_range module~mod_train_loop_short_range->module~mod_output_files_and_cost_4g_short_range module~mod_train_mode mod_train_mode module~mod_train_mode->module~mod_initialize module~mod_train_mode->module~mod_train_loop_4g_charges module~mod_train_mode->module~mod_train_loop_atomic_property module~mod_train_mode->module~mod_train_loop_short_range module~mod_write_outfiles_training mod_write_outfiles_training module~mod_train_mode->module~mod_write_outfiles_training module~mod_write_outfiles->module~mod_initialize program~runner RuNNer program~runner->module~mod_initialize program~runner->module~mod_predict_mode program~runner->module~mod_train_mode module~mod_lammps_interface mod_lammps_interface module~mod_lammps_interface->module~mod_runner_interface_bindings module~mod_write_outfiles_training->module~mod_write_outfiles module~mod_cost_calculator->module~mod_write_outfiles_training module~mod_output_files_and_cost->module~mod_cost_calculator module~mod_output_files_and_cost_4g_charges->module~mod_cost_calculator module~mod_output_files_and_cost_4g_short_range->module~mod_cost_calculator

Derived Types Summary

Name Description
NeuralNetwork A general feed-forward neural network. This type implements a general-purpose feed-forward...

Procedures Summary

Name Type Description
get_num_parameters_neural_network Function Calculate the number of parameters for a dense neural network of given architecture.
get_num_nodes_input_neuralnetwork Function
initialize_nn_from_architecture Subroutine
initialize_nn_from_list_of_layers Subroutine
reset_prediction_neuralnetwork Subroutine Reset the internal arrays that store the gradient information. This should be called before...
reset_neuralnetwork Subroutine Reset the internal arrays that store the gradient information. This should be called before...
reallocate_neuralnetwork Subroutine Change the dimensions of all internal arrays in the layers to accomodate batchsize input...
print_neuralnetwork Subroutine Pretty-print the neural network at self and its members.
forward_neuralnetwork Subroutine Pass a batch of samples forward through all layers of the neural network.
forward_gradient_neuralnetwork Subroutine Pass a batch of samples and their gradients forward through all layers of the neural network. ...
calc_jacobian_neuralnetwork Subroutine Compute the full Jacobian of the neural network. The Jacobian contains all derivatives of the...
backward_neuralnetwork Subroutine
backward_gradient_neuralnetwork Subroutine
get_parameters_neuralnetwork Subroutine Cast all free parameters of the model in one array of shape (1 x num_parameters).
set_parameters_neuralnetwork Subroutine Set the free parameters of self based on the flat array parameters.
get_gradients_wrt_parameters_neuralnetwork Subroutine Cast the gradients of the output with respect to all free parameters into one flat array.
precondition_parameters_neuralnetwork Subroutine Precondition weights and bias values based on an intial forward pass. This routine is used to...
init_parameters Subroutine Initialize the parameters of the neural network. This routine initializes the parameters of the...

Derived Types Details

type NeuralNetwork

A general feed-forward neural network.

This type implements a general-purpose feed-forward neural network with an arbitrary number of input nodes, hidden layers, and output nodes. It functions with arbitrary optimizers and hidden layer types, just as long as these are subclasses of AbstractOptimizer and AbstractLayer.

Components

  • input_layer : type(InputLayer)
  • hidden_layers : type(DenseLayer) (dim: (:))
  • output_layer : class(DenseLayer)
  • name : character
  • num_input_nodes : integer
  • num_output_nodes : integer
  • num_hidden_layers : integer– Total number of hidden layers. Equal to `size(hidden_layers)`.
  • parameter_file_prefix : character– Prefix of the file from which parameters will be read/written.
  • num_parameters : integer– The total number of free parameters in the model. This should always be set by the `constructor` procedure of the derived type.
  • num_parameters_mask : integer– The total number of free parameters after the application of `mask`.
  • batchsize : integer– How many samples can pass concurrently through the network.
  • num_forward_passes : integer– How many forward passes have been performed since the last call to `reset_prediction`.
  • num_backward_passes : integer– How many backward passes have been performend since the last call to `reset`.
  • grad : real(DP) (dim: (:,:))– Gradients wrt the model input. Dimension (num_input_nodes x batchsize).
  • output : real(DP) (dim: (:,:))– The output of the model. Dimension (num_output_nodes x batchsize)
  • jacobian : real(DP) (dim: (:,:,:))– The full Jacobian of the network. Dimension (num_input_nodes x batchsize x num_output_nodes).
  • mask : logical (dim: (:))– A logical array specifying, for each free parameter, whether it should be optimized or not.
  • optimizer_idx : integer– Index of the optimizer that is used to update the free parameters in the list of all optimizers that were specified for the program. This is helper variable to map between models and optimizers.

Type-Bound Procedures

Name Attributes Binding
print public ⇒ print_neuralnetwork
get_num_nodes_input public ⇒ get_num_nodes_input_neuralnetwork
get_parameters public ⇒ get_parameters_neuralnetwork
set_parameters public ⇒ set_parameters_neuralnetwork
get_gradients_wrt_parameters public ⇒ get_gradients_wrt_parameters_neuralnetwork
reset public ⇒ reset_neuralnetwork
reset_prediction public ⇒ reset_prediction_neuralnetwork
reallocate public ⇒ reallocate_neuralnetwork
initialize_nn_from_list_of_layers private ⇒ initialize_nn_from_list_of_layers
initialize_nn_from_architecture private ⇒ initialize_nn_from_architecture
initialize public ⇒ initialize_nn_from_list_of_layers⇒ initialize_nn_from_architecture
forward public ⇒ forward_neuralnetwork
backward public ⇒ backward_neuralnetwork
forward_gradient public ⇒ forward_gradient_neuralnetwork
backward_gradient public ⇒ backward_gradient_neuralnetwork
calc_jacobian public ⇒ calc_jacobian_neuralnetwork
init_parameters public ⇒ init_parameters
precondition_parameters public ⇒ precondition_parameters_neuralnetwork

Inherits

type~~neuralnetwork~~InheritsGraph type~neuralnetwork NeuralNetwork type~denselayer DenseLayer type~neuralnetwork->type~denselayer hidden_layers, output_layer type~inputlayer InputLayer type~neuralnetwork->type~inputlayer input_layer type~abstractactivationfunction AbstractActivationFunction type~denselayer->type~abstractactivationfunction f_act

Inherited By

type~~neuralnetwork~~InheritedByGraph type~neuralnetwork NeuralNetwork type~hdnn HDNN type~hdnn->type~neuralnetwork atomic_nns

Procedure Details

function get_num_parameters_neural_network

function get_num_parameters_neural_network( &
    num_input_nodes, &
    num_hidden_layers, &
    num_nodes_per_hidden_layer, &
    num_output_nodes &
)

Calculate the number of parameters for a dense neural network of given architecture.

Arguments

  • num_input_nodes : integer [in]
  • num_hidden_layers : integer [in]
  • num_nodes_per_hidden_layer : integer (dim: (num_hidden_layers)) [in]
  • num_output_nodes : integer [in]

function get_num_nodes_input_neuralnetwork

function get_num_nodes_input_neuralnetwork( &
    self &
)

Arguments

Called By

proc~~get_num_nodes_input_neuralnetwork~~CalledByGraph proc~get_num_nodes_input_neuralnetwork mod_neural_network::NeuralNetwork%get_num_nodes_input_neuralnetwork proc~calc_jacobian_hdnn mod_hdnn::HDNN%calc_jacobian_hdnn proc~calc_jacobian_hdnn->proc~get_num_nodes_input_neuralnetwork proc~initialize_hdnn mod_hdnn::HDNN%initialize_hdnn proc~initialize_hdnn->proc~get_num_nodes_input_neuralnetwork proc~initialize_from_nns mod_hdnn::HDNN%initialize_from_nns proc~initialize_from_nns->proc~initialize_hdnn proc~initialize_from_architecture mod_hdnn::HDNN%initialize_from_architecture proc~initialize_from_architecture->proc~initialize_from_nns proc~initialize_from_file_hdnn mod_hdnn::HDNN%initialize_from_file_hdnn proc~initialize_from_file_hdnn->proc~initialize_from_architecture

subroutine initialize_nn_from_architecture

subroutine initialize_nn_from_architecture( &
    self, &
    name, &
    num_input_nodes, &
    input_node_activations, &
    num_hidden_layers, &
    num_nodes_per_hidden_layer, &
    hidden_layer_activations, &
    num_output_nodes, &
    output_node_activations, &
    parameter_file_prefix, &
    batchsize, &
    lsaturation_check, &
    mask &
)

Arguments

  • self : class(NeuralNetwork) [out]– The neural network that will be initialized.
  • name : character [in]
  • num_input_nodes : integer [in]– The size of the input layer, i.e. the number of input features.
  • input_node_activations : character (dim: (num_input_nodes)) [in]– For each input node, a different activation function can be specified.
  • num_hidden_layers : integer [in]– The number of hidden layers (that means not including input or output layer.)
  • num_nodes_per_hidden_layer : integer (dim: (num_hidden_layers)) [in]– The size of each hidden layer.
  • hidden_layer_activations : character (dim: (num_hidden_layers)) [in]– For each hidden layer, a letter specifying the activation function that is used for all nodes. See `get_activation_function` for more info.
  • num_output_nodes : integer [in]– The size of the output layer. This determines how many values the network can predict.
  • output_node_activations : character (dim: (num_output_nodes)) [in]– For each output node, a different activation function can be specified.
  • parameter_file_prefix : character [in]– The first part for the filename from which parameters are read.
  • batchsize : integer [in]– How many samples can pass through the network at once.
  • lsaturation_check : logical [in]– Whether node saturation is checked during a forward pass. If True, this can have a very negative effect on performance.
  • mask : logical (dim: (:)) [in]

Called By

proc~~initialize_nn_from_architecture~~CalledByGraph proc~initialize_nn_from_architecture mod_neural_network::NeuralNetwork%initialize_nn_from_architecture none~initialize mod_neural_network::NeuralNetwork%initialize none~initialize->proc~initialize_nn_from_architecture proc~initialize_from_architecture mod_hdnn::HDNN%initialize_from_architecture proc~initialize_from_architecture->none~initialize proc~initialize_from_file_hdnn mod_hdnn::HDNN%initialize_from_file_hdnn proc~initialize_from_file_hdnn->proc~initialize_from_architecture

subroutine initialize_nn_from_list_of_layers

subroutine initialize_nn_from_list_of_layers( &
    self, &
    input_layer, &
    hidden_layers, &
    output_layer, &
    batchsize, &
    parameter_file_prefix, &
    mask &
)

Arguments

  • self : class(NeuralNetwork) [inout]– The neural network that will be initialized.
  • input_layer : type(InputLayer) [in]
  • hidden_layers : type(DenseLayer) (dim: (:)) [in]
  • output_layer : class(DenseLayer) [in]
  • batchsize : integer [in]– The number of samples that can pass concurrently through the network.
  • parameter_file_prefix : character [in]
  • mask : logical (dim: (:)) [in]

Called By

proc~~initialize_nn_from_list_of_layers~~CalledByGraph proc~initialize_nn_from_list_of_layers mod_neural_network::NeuralNetwork%initialize_nn_from_list_of_layers none~initialize mod_neural_network::NeuralNetwork%initialize none~initialize->proc~initialize_nn_from_list_of_layers proc~initialize_nn_from_architecture mod_neural_network::NeuralNetwork%initialize_nn_from_architecture none~initialize->proc~initialize_nn_from_architecture proc~initialize_nn_from_architecture->proc~initialize_nn_from_list_of_layers proc~initialize_from_architecture mod_hdnn::HDNN%initialize_from_architecture proc~initialize_from_architecture->none~initialize proc~initialize_from_file_hdnn mod_hdnn::HDNN%initialize_from_file_hdnn proc~initialize_from_file_hdnn->proc~initialize_from_architecture

subroutine reset_prediction_neuralnetwork

subroutine reset_prediction_neuralnetwork( &
    self &
)

Reset the internal arrays that store the gradient information. This should be called before every forward pass.

Arguments

Called By

proc~~reset_prediction_neuralnetwork~~CalledByGraph proc~reset_prediction_neuralnetwork mod_neural_network::NeuralNetwork%reset_prediction_neuralnetwork proc~reset_prediction_hdnn mod_hdnn::HDNN%reset_prediction_hdnn proc~reset_prediction_hdnn->proc~reset_prediction_neuralnetwork proc~reset_hdnn mod_hdnn::HDNN%reset_hdnn proc~reset_hdnn->proc~reset_prediction_hdnn

subroutine reset_neuralnetwork

subroutine reset_neuralnetwork( &
    self &
)

Reset the internal arrays that store the gradient information. This should be called before every forward pass.

Arguments

Called By

proc~~reset_neuralnetwork~~CalledByGraph proc~reset_neuralnetwork mod_neural_network::NeuralNetwork%reset_neuralnetwork proc~reallocate_neuralnetwork mod_neural_network::NeuralNetwork%reallocate_neuralnetwork proc~reallocate_neuralnetwork->proc~reset_neuralnetwork proc~reset_hdnn mod_hdnn::HDNN%reset_hdnn proc~reset_hdnn->proc~reset_neuralnetwork proc~initialize_nn_from_list_of_layers mod_neural_network::NeuralNetwork%initialize_nn_from_list_of_layers proc~initialize_nn_from_list_of_layers->proc~reallocate_neuralnetwork proc~reallocate_hdnn mod_hdnn::HDNN%reallocate_hdnn proc~reallocate_hdnn->proc~reallocate_neuralnetwork none~initialize mod_neural_network::NeuralNetwork%initialize none~initialize->proc~initialize_nn_from_list_of_layers proc~initialize_nn_from_architecture mod_neural_network::NeuralNetwork%initialize_nn_from_architecture none~initialize->proc~initialize_nn_from_architecture proc~initialize_nn_from_architecture->proc~initialize_nn_from_list_of_layers proc~initialize_from_architecture mod_hdnn::HDNN%initialize_from_architecture proc~initialize_from_architecture->none~initialize proc~initialize_from_file_hdnn mod_hdnn::HDNN%initialize_from_file_hdnn proc~initialize_from_file_hdnn->proc~initialize_from_architecture

subroutine reallocate_neuralnetwork

subroutine reallocate_neuralnetwork( &
    self, &
    batchsize &
)

Change the dimensions of all internal arrays in the layers to accomodate batchsize input and output values.

Arguments

Called By

proc~~reallocate_neuralnetwork~~CalledByGraph proc~reallocate_neuralnetwork mod_neural_network::NeuralNetwork%reallocate_neuralnetwork proc~initialize_nn_from_list_of_layers mod_neural_network::NeuralNetwork%initialize_nn_from_list_of_layers proc~initialize_nn_from_list_of_layers->proc~reallocate_neuralnetwork proc~reallocate_hdnn mod_hdnn::HDNN%reallocate_hdnn proc~reallocate_hdnn->proc~reallocate_neuralnetwork none~initialize mod_neural_network::NeuralNetwork%initialize none~initialize->proc~initialize_nn_from_list_of_layers proc~initialize_nn_from_architecture mod_neural_network::NeuralNetwork%initialize_nn_from_architecture none~initialize->proc~initialize_nn_from_architecture proc~initialize_nn_from_architecture->proc~initialize_nn_from_list_of_layers proc~initialize_from_architecture mod_hdnn::HDNN%initialize_from_architecture proc~initialize_from_architecture->none~initialize proc~initialize_from_file_hdnn mod_hdnn::HDNN%initialize_from_file_hdnn proc~initialize_from_file_hdnn->proc~initialize_from_architecture

subroutine print_neuralnetwork

subroutine print_neuralnetwork( &
    self &
)

Pretty-print the neural network at self and its members.

Arguments


subroutine forward_neuralnetwork

subroutine forward_neuralnetwork( &
    self, &
    x &
)

Pass a batch of samples forward through all layers of the neural network.

Arguments

  • self : class(NeuralNetwork) [inout]
  • x : real(DP) (dim: (self%num_input_nodes,self%batchsize)) [in]– Data that is passed forward through the network. Data must be padded beforehand to fill the batchsize of `self`.

subroutine forward_gradient_neuralnetwork

subroutine forward_gradient_neuralnetwork( &
    self, &
    x, &
    dx_dq &
)

Pass a batch of samples and their gradients forward through all layers of the neural network.

This is an implementation of forward-mode differentiation.

Arguments

  • self : class(NeuralNetwork) [inout]
  • x : real(DP) (dim: (self%num_input_nodes,self%batchsize)) [in]– The input data with dimension (num_input_nodes, batchsize).
  • dx_dq : real(DP) (dim: (self%num_input_nodes,self%batchsize)) [in]– The gradient of the input vector with respect to one coordinate. Data that is passed forward through the network. Data must be padded beforehand to fill the batchsize of `self`.

subroutine calc_jacobian_neuralnetwork

subroutine calc_jacobian_neuralnetwork( &
    self &
)

Compute the full Jacobian of the neural network.

The Jacobian contains all derivatives of the output neurons with respect to the input neurons, i.e. \(J \in\R^{(N_in, N_out)}\) It is usually needed during inference or in sensitivity analysis. For example, in a 2G we calculated dE/dG * dG/dxyz where dE/dG is the Jacobian of the network.

On a technical level, the calculation of the Jacobian is implemented as self%num_output_neuron backward passes through the entire network. As we are not interested in the loss gradients, we start with a one-hot encoding. This is simply a vector that is 1 for the current output node in the loop and 0 otherwise. The one-hot encoding ensures that we obtain exactly the gradient of that output neuron. It is stored by self%backward in self%grad. We transfer those gradients with dimension (num_input_nodes, batchsize) to the `jacobian(:, :, iout) array and reset the whole network before doing the next backward pass for the next output neuron.

It is easy to see that for a single output neuron this routine reduces to a single call of self%backward with 1.0 as the loss_gradient of each sample and a copy operation of `self%jacobian(:, :, 1) = self%grad.

Arguments

Called By

proc~~calc_jacobian_neuralnetwork~~CalledByGraph proc~calc_jacobian_neuralnetwork mod_neural_network::NeuralNetwork%calc_jacobian_neuralnetwork proc~calc_jacobian_hdnn mod_hdnn::HDNN%calc_jacobian_hdnn proc~calc_jacobian_hdnn->proc~calc_jacobian_neuralnetwork

subroutine backward_neuralnetwork

subroutine backward_neuralnetwork( &
    self, &
    loss_gradients, &
    calc_gradient_wrt_parameters &
)

Arguments

  • self : class(NeuralNetwork) [inout]
  • loss_gradients : real(DP) (dim: (self%num_output_nodes,self%batchsize)) [in]
  • calc_gradient_wrt_parameters : logical [in]– Whether to calculate and store dLdb and dLdW. Only needed for training.

Called By

proc~~backward_neuralnetwork~~CalledByGraph proc~backward_neuralnetwork mod_neural_network::NeuralNetwork%backward_neuralnetwork proc~calc_jacobian_neuralnetwork mod_neural_network::NeuralNetwork%calc_jacobian_neuralnetwork proc~calc_jacobian_neuralnetwork->proc~backward_neuralnetwork proc~calc_jacobian_hdnn mod_hdnn::HDNN%calc_jacobian_hdnn proc~calc_jacobian_hdnn->proc~calc_jacobian_neuralnetwork

subroutine backward_gradient_neuralnetwork

subroutine backward_gradient_neuralnetwork( &
    self, &
    loss_gradients &
)

Arguments

  • self : class(NeuralNetwork) [inout]
  • loss_gradients : real(DP) (dim: (self%num_output_nodes,self%batchsize)) [in]– The gradients of the loss for each output node.

subroutine get_parameters_neuralnetwork

subroutine get_parameters_neuralnetwork( &
    self, &
    parameters, &
    luse_mask &
)

Cast all free parameters of the model in one array of shape (1 x num_parameters).

Arguments

  • self : class(NeuralNetwork) [in]
  • parameters : real(DP) (dim: (:)) [out]– Empty array to which free parameters will be cast.
  • luse_mask : logical [in]– Gets parameters with or without mask.

Called By

proc~~get_parameters_neuralnetwork~~CalledByGraph proc~get_parameters_neuralnetwork mod_neural_network::NeuralNetwork%get_parameters_neuralnetwork proc~get_parameters_hdnn mod_hdnn::HDNN%get_parameters_hdnn proc~get_parameters_hdnn->proc~get_parameters_neuralnetwork proc~write_parameters_to_file_hdnn mod_hdnn::HDNN%write_parameters_to_file_hdnn proc~write_parameters_to_file_hdnn->proc~get_parameters_neuralnetwork

subroutine set_parameters_neuralnetwork

subroutine set_parameters_neuralnetwork( &
    self, &
    parameters, &
    luse_mask &
)

Set the free parameters of self based on the flat array parameters.

Arguments

  • self : class(NeuralNetwork) [inout]
  • parameters : real(DP) (dim: (:)) [in]– Parameters which will be attached on `self`.
  • luse_mask : logical [in]– Sets parameters with or without mask.

Called By

proc~~set_parameters_neuralnetwork~~CalledByGraph proc~set_parameters_neuralnetwork mod_neural_network::NeuralNetwork%set_parameters_neuralnetwork proc~set_parameters_hdnn mod_hdnn::HDNN%set_parameters_hdnn proc~set_parameters_hdnn->proc~set_parameters_neuralnetwork

subroutine get_gradients_wrt_parameters_neuralnetwork

subroutine get_gradients_wrt_parameters_neuralnetwork( &
    self, &
    gradients, &
    luse_mask &
)

Cast the gradients of the output with respect to all free parameters into one flat array.

Arguments

  • self : class(NeuralNetwork) [inout]
  • gradients : real(DP) (dim: (:)) [out]– The list of gradients, one for each free parameter in `self`.
  • luse_mask : logical [in]– Gets parameters with or without mask.

Called By

proc~~get_gradients_wrt_parameters_neuralnetwork~~CalledByGraph proc~get_gradients_wrt_parameters_neuralnetwork mod_neural_network::NeuralNetwork%get_gradients_wrt_parameters_neuralnetwork proc~get_gradients_wrt_parameters_hdnn mod_hdnn::HDNN%get_gradients_wrt_parameters_hdnn proc~get_gradients_wrt_parameters_hdnn->proc~get_gradients_wrt_parameters_neuralnetwork

subroutine precondition_parameters_neuralnetwork

subroutine precondition_parameters_neuralnetwork( &
    self, &
    target_mean, &
    prediction_mean, &
    target_std, &
    prediction_std &
)

Precondition weights and bias values based on an intial forward pass.

This routine is used to precondition the weights and biases of the output layer based on the target values and the initial prediction.

Arguments

  • self : class(NeuralNetwork) [inout]
  • target_mean : real(DP) [in]
  • prediction_mean : real(DP) [in]
  • target_std : real(DP) [in]
  • prediction_std : real(DP) [in]

Called By

proc~~precondition_parameters_neuralnetwork~~CalledByGraph proc~precondition_parameters_neuralnetwork mod_neural_network::NeuralNetwork%precondition_parameters_neuralnetwork proc~precondition_parameters_hdnn mod_hdnn::HDNN%precondition_parameters_hdnn proc~precondition_parameters_hdnn->proc~precondition_parameters_neuralnetwork

subroutine init_parameters

subroutine init_parameters( &
    self, &
    init_method_hidden_layers, &
    init_method_output_layers, &
    min_weight, &
    max_weight, &
    target_mean, &
    target_range, &
    target_std, &
    random_number_generator &
)

Initialize the parameters of the neural network.

This routine initializes the parameters of the neural network based on the given initialization methods. See the AbstractLayer class for more information.

Arguments

  • self : class(NeuralNetwork) [inout]
  • init_method_hidden_layers : character [in]
  • init_method_output_layers : character [in]
  • min_weight : real(DP) [in]
  • max_weight : real(DP) [in]
  • target_mean : real(DP) [in]
  • target_range : real(DP) [in]
  • target_std : real(DP) [in]
  • random_number_generator : type(RandomNumberGenerator) [inout]

Called By

proc~~init_parameters~~CalledByGraph proc~init_parameters mod_neural_network::NeuralNetwork%init_parameters proc~initialize_parameters_hdnn mod_hdnn::HDNN%initialize_parameters_hdnn proc~initialize_parameters_hdnn->proc~init_parameters