Skip to content

mod_hdnn

Lines: 964 | Visibility: private

Implementation of a general high-dimensional neural network. author: Alexander Knoll

Dependencies

Uses

module~~mod_hdnn~~UsesGraph module~mod_hdnn mod_hdnn module~mod_abstract_property_model mod_abstract_property_model module~mod_hdnn->module~mod_abstract_property_model module~mod_array_helpers mod_array_helpers module~mod_hdnn->module~mod_array_helpers module~mod_decorations mod_decorations module~mod_hdnn->module~mod_decorations module~mod_global_warning mod_global_warning module~mod_hdnn->module~mod_global_warning module~mod_initialize_array mod_initialize_array module~mod_hdnn->module~mod_initialize_array module~mod_io mod_io module~mod_hdnn->module~mod_io module~mod_neural_network mod_neural_network module~mod_hdnn->module~mod_neural_network module~mod_periodic_table mod_periodic_table module~mod_hdnn->module~mod_periodic_table module~mod_precision mod_precision module~mod_hdnn->module~mod_precision module~mod_random mod_random module~mod_hdnn->module~mod_random module~mod_settings mod_settings module~mod_hdnn->module~mod_settings module~mod_throw mod_throw module~mod_hdnn->module~mod_throw module~mod_abstract_property_model->module~mod_array_helpers module~mod_abstract_property_model->module~mod_initialize_array module~mod_abstract_property_model->module~mod_io module~mod_abstract_property_model->module~mod_precision module~mod_abstract_property_model->module~mod_random module~mod_abstract_property_model->module~mod_settings module~mod_abstract_property_model->module~mod_throw module~mod_array_helpers->module~mod_precision module~mod_array_helpers->module~mod_throw module~mod_decorations->module~mod_io module~mod_decorations->module~mod_precision module~mod_decorations->module~mod_throw 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_mpi mod_mpi module~mod_initialize_array->module~mod_mpi module~mod_parameter_file mod_parameter_file module~mod_initialize_array->module~mod_parameter_file module~mod_io->module~mod_precision iso_fortran_env iso_fortran_env module~mod_io->iso_fortran_env module~mod_optional_args mod_optional_args module~mod_io->module~mod_optional_args module~mod_neural_network->module~mod_decorations module~mod_neural_network->module~mod_io module~mod_neural_network->module~mod_precision module~mod_neural_network->module~mod_random module~mod_neural_network->module~mod_throw module~mod_activationfunctions mod_activationfunctions module~mod_neural_network->module~mod_activationfunctions module~mod_layers mod_layers module~mod_neural_network->module~mod_layers module~mod_neural_network->module~mod_optional_args module~mod_periodic_table->module~mod_array_helpers module~mod_periodic_table->module~mod_io module~mod_periodic_table->module~mod_precision module~mod_periodic_table->module~mod_throw module~mod_constants mod_constants module~mod_periodic_table->module~mod_constants 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_random->module~mod_constants module~mod_settings->module~mod_io module~mod_settings->module~mod_periodic_table 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_throw->module~mod_io module~mod_throw->module~mod_precision module~mod_throw->iso_c_binding module~mod_throw->iso_fortran_env module~mod_throw->module~mod_mpi module~mod_sort mod_sort module~mod_throw->module~mod_sort 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_constants->module~mod_precision module~mod_constants->iso_c_binding module~mod_cpu_vendor->iso_c_binding 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 module~mod_mpi->module~mod_precision mpi_f08 mpi_f08 module~mod_mpi->mpi_f08 module~mod_parameter_file->module~mod_io module~mod_parameter_file->module~mod_precision module~mod_parameter_file->module~mod_throw module~mod_abstract_broadcast_file mod_abstract_broadcast_file module~mod_parameter_file->module~mod_abstract_broadcast_file module~mod_nan_check mod_nan_check module~mod_parameter_file->module~mod_nan_check module~mod_sort->module~mod_precision 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_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_dense_layer->module~mod_decorations module~mod_dense_layer->module~mod_global_warning module~mod_dense_layer->module~mod_initialize_array module~mod_dense_layer->module~mod_io 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_activationfunctions module~mod_dense_layer->module~mod_constants module~mod_dense_layer->module~mod_optional_args module~mod_dense_layer->module~mod_nan_check module~mod_linalg mod_linalg module~mod_dense_layer->module~mod_linalg module~mod_dense_layer_with_single_activations->module~mod_decorations module~mod_dense_layer_with_single_activations->module~mod_global_warning 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_activationfunctions module~mod_dense_layer_with_single_activations->module~mod_dense_layer 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_decorations module~mod_input_layer_with_activations->module~mod_global_warning 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_activationfunctions module~mod_input_layer_with_activations->module~mod_input_layer 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~mod_genericfile->module~mod_io module~mod_genericfile->module~mod_throw module~mod_genericfile->module~mod_mpi module~mod_linalg->module~mod_precision module~mod_linalg->module~mod_settings module~mod_linalg->module~mod_throw module~cublas_wrapper cublas_wrapper module~mod_linalg->module~cublas_wrapper module~mod_sanitize->module~mod_throw module~cublas_wrapper->module~mod_settings module~cublas_wrapper->iso_c_binding

Used By

module~~mod_hdnn~~UsedByGraph module~mod_hdnn mod_hdnn 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

Module Variables

  • GENERIC_KEYWORDS_HDNN : character (dim: (*))

Derived Types Summary

Name Description
HDNN A general feed-forward neural network with an arbitrary number of input nodes, hidden layers,...

Procedures Summary

Name Type Description
constructor_hdnn Function
get_element_index Function
get_num_parameters_hdnn Function
get_max_num_hidden_layers Function
get_num_forward_passes_hdnn Function
get_num_backward_passes_hdnn Function
initialize_hdnn Subroutine
set_optimizer_hdnn Subroutine Set the optimizer_idx on this HDNN. Must be called after initialization. Checks for lines...
initialize_from_file_hdnn Subroutine Initialize a HDNN object mod_hdnn:HDNN with the lines...
initialize_from_architecture Subroutine
initialize_from_nns Subroutine
reallocate_hdnn Subroutine
reset_hdnn Subroutine Reset all atomic neural networks in this HDNN.
reset_prediction_hdnn Subroutine Reset the internal arrays that store the gradient information. This should be called before...
print_hdnn Subroutine Display information about the object and its members.
forward_hdnn Subroutine Calculate the output of all atomic NNs for self%input.
pad Subroutine
forward_gradient_hdnn Subroutine Calculate the output of all atomic NNs for self%input.
backward_hdnn Subroutine Perform a backward pass through all atomic NNs individually.
backward_gradient_hdnn Subroutine Perform a backward pass through all atomic NNs individually.
calc_jacobian_hdnn Subroutine
get_parameters_hdnn Subroutine Cast all free parameters of the model in one array of shape (1 x num_parameters).
set_parameters_hdnn Subroutine Set the free parameters of self based on the flat array parameters.
get_gradients_wrt_parameters_hdnn Subroutine Cast the gradients of the output with respect to all free parameters into one flat array.
read_parameters_from_file_hdnn Subroutine Delegate parameter reading to the individual atomic NNs.
write_parameters_to_file_hdnn Subroutine Delegate parameter writing to the individual atomic NNs.
precondition_parameters_hdnn Subroutine
initialize_parameters_hdnn Subroutine
get_opt_ids_and_targets_hdnn Subroutine Returns the atomic numbers composing the model in the targets array and the indices of their...

Derived Types Details

type HDNN

A general feed-forward neural network with an arbitrary number of input nodes, hidden layers, and output nodes.

Components

Type-Bound Procedures

Name Attributes Binding
initialize_parent public ⇒ initialize_abstract_property_model
initialize_from_file_parent public ⇒ initialize_from_file_abstract_property_model
reset_results public ⇒ reset_results
reallocate public ⇒ reallocate_hdnn
reset public ⇒ reset_hdnn
reset_prediction public ⇒ reset_prediction_hdnn
print public ⇒ print_hdnn
get_num_parameters public ⇒ get_num_parameters_hdnn
get_parameters public ⇒ get_parameters_hdnn
set_parameters public ⇒ set_parameters_hdnn
get_gradients_wrt_parameters public ⇒ get_gradients_wrt_parameters_hdnn
get_opt_ids_and_targets public ⇒ get_opt_ids_and_targets_hdnn
read_parameters_from_file public ⇒ read_parameters_from_file_hdnn
write_parameters_to_file public ⇒ write_parameters_to_file_hdnn
initialize_from_file public ⇒ initialize_from_file_hdnn
initialize public ⇒ initialize_hdnn
forward public ⇒ forward_hdnn
backward public ⇒ backward_hdnn
forward_gradient public ⇒ forward_gradient_hdnn
backward_gradient public ⇒ backward_gradient_hdnn
calc_jacobian public ⇒ calc_jacobian_hdnn
set_optimizer public ⇒ set_optimizer_hdnn
get_num_forward_passes public ⇒ get_num_forward_passes_hdnn
get_num_backward_passes public ⇒ get_num_backward_passes_hdnn
precondition_parameters public ⇒ precondition_parameters_hdnn
initialize_parameters public ⇒ initialize_parameters_hdnn
initialize_from_architecture private ⇒ initialize_from_architecture
initialize_from_nns private ⇒ initialize_from_nns

Inherits

type~~hdnn~~InheritsGraph type~hdnn HDNN type~abstractpropertymodel AbstractPropertyModel type~hdnn->type~abstractpropertymodel type~neuralnetwork NeuralNetwork type~hdnn->type~neuralnetwork atomic_nns 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

Interface Details

interface HDNN


Procedure Details

function constructor_hdnn

function constructor_hdnn( &
    name, &
    keyword_suffix, &
    parameter_file_prefix, &
    comm_idx &
)

Arguments

  • name : character [in]
  • keyword_suffix : character [in]
  • parameter_file_prefix : character [in]
  • comm_idx : integer [in]

Called By

proc~~constructor_hdnn~~CalledByGraph proc~constructor_hdnn mod_hdnn::constructor_hdnn interface~hdnn mod_hdnn::HDNN interface~hdnn->proc~constructor_hdnn

function get_element_index

function get_element_index( &
    arr, &
    elem &
)

Arguments

  • arr : integer (dim: (:)) [in]
  • elem : integer [in]

Called By

proc~~get_element_index~~CalledByGraph proc~get_element_index mod_hdnn::get_element_index proc~backward_gradient_hdnn mod_hdnn::HDNN%backward_gradient_hdnn proc~backward_gradient_hdnn->proc~get_element_index proc~backward_hdnn mod_hdnn::HDNN%backward_hdnn proc~backward_hdnn->proc~get_element_index proc~calc_jacobian_hdnn mod_hdnn::HDNN%calc_jacobian_hdnn proc~calc_jacobian_hdnn->proc~get_element_index proc~forward_gradient_hdnn mod_hdnn::HDNN%forward_gradient_hdnn proc~forward_gradient_hdnn->proc~get_element_index proc~forward_hdnn mod_hdnn::HDNN%forward_hdnn proc~forward_hdnn->proc~get_element_index

function get_num_parameters_hdnn

function get_num_parameters_hdnn( &
    self, &
    luse_mask, &
    optimizer_idx, &
    atomic_numbers &
)

Arguments

  • self : class(HDNN) [in]
  • luse_mask : logical [in]
  • optimizer_idx : integer [in]
  • atomic_numbers : integer (dim: (:)) [in]

function get_max_num_hidden_layers

function get_max_num_hidden_layers( &
    lines &
)

Arguments

  • lines : character (dim: (:)) [in]– Individual lines from input.nn

Called By

proc~~get_max_num_hidden_layers~~CalledByGraph proc~get_max_num_hidden_layers mod_hdnn::get_max_num_hidden_layers proc~initialize_from_file_hdnn mod_hdnn::HDNN%initialize_from_file_hdnn proc~initialize_from_file_hdnn->proc~get_max_num_hidden_layers

function get_num_forward_passes_hdnn

function get_num_forward_passes_hdnn( &
    self, &
    optimizer_idx, &
    atomic_numbers &
)

Arguments

  • self : class(HDNN) [in]
  • optimizer_idx : integer [in]
  • atomic_numbers : integer (dim: (:)) [in]

function get_num_backward_passes_hdnn

function get_num_backward_passes_hdnn( &
    self, &
    optimizer_idx, &
    atomic_numbers &
)

Arguments

  • self : class(HDNN) [in]
  • optimizer_idx : integer [in]
  • atomic_numbers : integer (dim: (:)) [in]

subroutine initialize_hdnn

subroutine initialize_hdnn( &
    self, &
    file_path, &
    initialization_method, &
    precondition_method, &
    parameter_min, &
    parameter_max &
)

Arguments

  • self : class(HDNN) [inout]
  • file_path : character [in]
  • initialization_method : character [in]
  • precondition_method : character [in]
  • parameter_min : real(DP) [in]
  • parameter_max : real(DP) [in]

Called By

proc~~initialize_hdnn~~CalledByGraph proc~initialize_hdnn mod_hdnn::HDNN%initialize_hdnn 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 set_optimizer_hdnn

subroutine set_optimizer_hdnn( &
    self, &
    lines, &
    num_parameters_per_optimizer &
)

Set the optimizer_idx on this HDNN. Must be called after initialization.

Checks for lines with the patterns like opt_short 1 or opt_short H 2. The index is the one of the optimizer in the optimizers array. This is set in the input file by specfying the index after the optimizer keyword. In case default_optimizers is used, the index of the default optimizer is 1.

Arguments

  • self : class(HDNN) [inout]
  • lines : character (dim: (:)) [in]
  • num_parameters_per_optimizer : integer (dim: (:)) [inout]

subroutine initialize_from_file_hdnn

subroutine initialize_from_file_hdnn( &
    self, &
    file_path, &
    lines, &
    atomic_numbers, &
    num_input_features_per_element, &
    num_output_properties, &
    batchsize_per_element, &
    lsaturation_check &
)

Initialize a HDNN object mod_hdnn:HDNN with the lines read from a configuration file.

Arguments

  • self : class(HDNN) [inout]
  • file_path : character [in]– Path to the folder where the weights files are stored.
  • lines : character (dim: (:)) [in]– Individual lines from input.nn
  • atomic_numbers : integer (dim: (:)) [in]– The atomic numbers for which atomic NNs are constructed.
  • num_input_features_per_element : integer (dim: (:)) [in]
  • num_output_properties : integer [in]
  • batchsize_per_element : integer (dim: (:)) [in]
  • lsaturation_check : logical [in]

subroutine initialize_from_architecture

subroutine initialize_from_architecture( &
    self, &
    file_path, &
    atomic_numbers, &
    num_input_nodes_per_element, &
    input_node_activations_per_element, &
    num_hidden_layers_per_element, &
    num_hidden_nodes_per_element, &
    hidden_layer_activations_per_element, &
    num_output_nodes, &
    output_node_activations_per_element, &
    num_fixed_weights_per_element, &
    fixed_weights_per_element, &
    num_fixed_biases_per_element, &
    fixed_biases_per_element, &
    batchsize_atomic_nns, &
    lsaturation_check &
)

Arguments

  • self : class(HDNN) [inout]
  • file_path : character [in]
  • atomic_numbers : integer (dim: (:)) [in]
  • num_input_nodes_per_element : integer (dim: (:)) [in]
  • input_node_activations_per_element : character (dim: (:,:)) [in]
  • num_hidden_layers_per_element : integer (dim: (:)) [in]
  • num_hidden_nodes_per_element : integer (dim: (:,:)) [in]
  • hidden_layer_activations_per_element : character (dim: (:,:)) [in]
  • num_output_nodes : integer [in]
  • output_node_activations_per_element : character (dim: (:,:)) [in]
  • num_fixed_weights_per_element : integer (dim: (:)) [in]
  • fixed_weights_per_element : integer (dim: (:,:,:)) [in]
  • num_fixed_biases_per_element : integer (dim: (:)) [in]
  • fixed_biases_per_element : integer (dim: (:,:,:)) [in]
  • batchsize_atomic_nns : integer (dim: (:)) [in]
  • lsaturation_check : logical [in]

Called By

proc~~initialize_from_architecture~~CalledByGraph proc~initialize_from_architecture mod_hdnn::HDNN%initialize_from_architecture proc~initialize_from_file_hdnn mod_hdnn::HDNN%initialize_from_file_hdnn proc~initialize_from_file_hdnn->proc~initialize_from_architecture

subroutine initialize_from_nns

subroutine initialize_from_nns( &
    self, &
    file_path, &
    atomic_numbers, &
    nns, &
    num_output_properties &
)

Arguments

  • self : class(HDNN) [inout]
  • file_path : character [in]
  • atomic_numbers : integer (dim: (:)) [in]
  • nns : type(NeuralNetwork) (dim: (size(atomic_numbers))) [in]
  • num_output_properties : integer [in]

Called By

proc~~initialize_from_nns~~CalledByGraph proc~initialize_from_nns mod_hdnn::HDNN%initialize_from_nns 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 reallocate_hdnn

subroutine reallocate_hdnn( &
    self, &
    batchsize &
)

Arguments

  • self : class(HDNN) [inout]
  • batchsize : integer (dim: (MAX_ELEM_NUM)) [in]

subroutine reset_hdnn

subroutine reset_hdnn( &
    self &
)

Reset all atomic neural networks in this HDNN.

Arguments

  • self : class(HDNN) [inout]

subroutine reset_prediction_hdnn

subroutine reset_prediction_hdnn( &
    self &
)

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

Arguments

  • self : class(HDNN) [inout]

Called By

proc~~reset_prediction_hdnn~~CalledByGraph proc~reset_prediction_hdnn mod_hdnn::HDNN%reset_prediction_hdnn proc~reset_hdnn mod_hdnn::HDNN%reset_hdnn proc~reset_hdnn->proc~reset_prediction_hdnn

subroutine print_hdnn

subroutine print_hdnn( &
    self &
)

Display information about the object and its members.

Arguments

  • self : class(HDNN) [in]

subroutine forward_hdnn

subroutine forward_hdnn( &
    self, &
    features, &
    atomic_numbers, &
    num_features &
)

Calculate the output of all atomic NNs for self%input.

Arguments

  • self : class(HDNN) [inout]
  • features : real(DP) (dim: (:,:)) [in]– Dimension (max_num_features x batchsize)
  • atomic_numbers : integer (dim: (:)) [in]– The atomic number for each entry in the batch.
  • num_features : integer (dim: (MAX_ELEM_NUM)) [in]– The number of features for each entry in the batch.

subroutine pad

subroutine pad( &
    arr, &
    target_size, &
    arr_padded &
)

Arguments

  • arr : real(DP) (dim: (:,:)) [in]
  • target_size : integer [in]
  • arr_padded : real(DP) (dim: (:,:)) [out]

Called By

proc~~pad~~CalledByGraph proc~pad mod_hdnn::pad proc~backward_gradient_hdnn mod_hdnn::HDNN%backward_gradient_hdnn proc~backward_gradient_hdnn->proc~pad proc~backward_hdnn mod_hdnn::HDNN%backward_hdnn proc~backward_hdnn->proc~pad proc~forward_gradient_hdnn mod_hdnn::HDNN%forward_gradient_hdnn proc~forward_gradient_hdnn->proc~pad proc~forward_hdnn mod_hdnn::HDNN%forward_hdnn proc~forward_hdnn->proc~pad

subroutine forward_gradient_hdnn

subroutine forward_gradient_hdnn( &
    self, &
    features, &
    feature_gradients, &
    atomic_numbers, &
    num_features &
)

Calculate the output of all atomic NNs for self%input.

Arguments

  • self : class(HDNN) [inout]
  • features : real(DP) (dim: (:,:)) [in]
  • feature_gradients : real(DP) (dim: (:,:)) [in]
  • atomic_numbers : integer (dim: (:)) [in]– The atomic number for each entry in the batch.
  • num_features : integer (dim: (MAX_ELEM_NUM)) [in]– The number of features for each entry in the batch.

subroutine backward_hdnn

subroutine backward_hdnn( &
    self, &
    atomic_numbers, &
    loss_gradients &
)

Perform a backward pass through all atomic NNs individually.

Arguments

  • self : class(HDNN) [inout]
  • atomic_numbers : integer (dim: (:)) [in]
  • loss_gradients : real(DP) (dim: (:,:)) [in]– Loss gradient information.

subroutine backward_gradient_hdnn

subroutine backward_gradient_hdnn( &
    self, &
    atomic_numbers, &
    loss_gradients &
)

Perform a backward pass through all atomic NNs individually.

Arguments

  • self : class(HDNN) [inout]
  • atomic_numbers : integer (dim: (:)) [in]
  • loss_gradients : real(DP) (dim: (:,:)) [in]– Loss gradient information.

subroutine calc_jacobian_hdnn

subroutine calc_jacobian_hdnn( &
    self, &
    atomic_numbers &
)

Arguments

  • self : class(HDNN) [inout]
  • atomic_numbers : integer (dim: (:)) [in]

subroutine get_parameters_hdnn

subroutine get_parameters_hdnn( &
    self, &
    parameters, &
    luse_mask, &
    optimizer_idx &
)

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

Arguments

  • self : class(HDNN) [in]
  • parameters : real(DP) (dim: (:)) [inout]– Empty array to which free parameters will be cast.
  • luse_mask : logical [in]– Only retrieve those parameters for which `self%mask` is `.true.`.
  • optimizer_idx : integer [in]– Only retrieve parameters for those parts of the model which are updated by the optimizer with this index.

subroutine set_parameters_hdnn

subroutine set_parameters_hdnn( &
    self, &
    parameters, &
    luse_mask, &
    optimizer_idx &
)

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

Arguments

  • self : class(HDNN) [inout]
  • parameters : real(DP) (dim: (:)) [in]– Parameters which will be set on `self`.
  • luse_mask : logical [in]– Only set those parameters for which `self%mask` is `.true.`.
  • optimizer_idx : integer [in]– Only set parameters for those parts of the model which are updated by the optimizer with this index.

subroutine get_gradients_wrt_parameters_hdnn

subroutine get_gradients_wrt_parameters_hdnn( &
    self, &
    gradients, &
    luse_mask, &
    optimizer_idx &
)

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

Arguments

  • self : class(HDNN) [inout]– The instance of `Model` or any derived type for which the gradients will be determined.
  • gradients : real(DP) (dim: (:)) [inout]– The list of gradients, one for each free parameter in `self`.
  • luse_mask : logical [in]– Only retrieve the gradients for those parameters for which `self%mask` is `.true.`.
  • optimizer_idx : integer [in]– Only retrieve the gradients for those parts of the model which are updated by the optimizer with this index.

subroutine read_parameters_from_file_hdnn

subroutine read_parameters_from_file_hdnn( &
    self, &
    iteration, &
    prefix, &
    idx, &
    suffix &
)

Delegate parameter reading to the individual atomic NNs.

Arguments

  • self : class(HDNN) [inout]
  • iteration : integer [in]
  • prefix : character [in]
  • idx : integer [in]
  • suffix : character [in]

Called By

proc~~read_parameters_from_file_hdnn~~CalledByGraph proc~read_parameters_from_file_hdnn mod_hdnn::HDNN%read_parameters_from_file_hdnn proc~initialize_parameters_hdnn mod_hdnn::HDNN%initialize_parameters_hdnn proc~initialize_parameters_hdnn->proc~read_parameters_from_file_hdnn

subroutine write_parameters_to_file_hdnn

subroutine write_parameters_to_file_hdnn( &
    self, &
    iteration, &
    prefix, &
    idx, &
    suffix &
)

Delegate parameter writing to the individual atomic NNs.

Arguments

  • self : class(HDNN) [in]
  • iteration : integer [in]
  • prefix : character [in]
  • idx : integer [in]
  • suffix : character [in]

subroutine precondition_parameters_hdnn

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

Arguments

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

subroutine initialize_parameters_hdnn

subroutine initialize_parameters_hdnn( &
    self, &
    target_mean, &
    target_range, &
    target_std, &
    eckhoff_avg_atomic_energy, &
    rng &
)

Arguments

  • self : class(HDNN) [inout]
  • target_mean : real(DP) (dim: (:)) [in]
  • target_range : real(DP) (dim: (:)) [in]
  • target_std : real(DP) (dim: (:)) [in]
  • eckhoff_avg_atomic_energy : real(DP) (dim: (:)) [in]
  • rng : type(RandomNumberGenerator) [inout]

subroutine get_opt_ids_and_targets_hdnn

subroutine get_opt_ids_and_targets_hdnn( &
    self, &
    opt_ids, &
    targets &
)

Returns the atomic numbers composing the model in the targets array and the indices of their optimizers in the opt_ids array.

Arguments

  • self : class(HDNN) [in]
  • opt_ids : integer (dim: (:)) [out]
  • targets : integer (dim: (:)) [out]