trainable_engine_m Module

Define an abstraction that supports training a neural network


Uses

  • module~~trainable_engine_m~~UsesGraph module~trainable_engine_m trainable_engine_m module~differentiable_activation_strategy_m differentiable_activation_strategy_m module~trainable_engine_m->module~differentiable_activation_strategy_m module~inference_engine_m_ inference_engine_m_ module~trainable_engine_m->module~inference_engine_m_ module~kind_parameters_m kind_parameters_m module~trainable_engine_m->module~kind_parameters_m module~mini_batch_m mini_batch_m module~trainable_engine_m->module~mini_batch_m module~tensor_m tensor_m module~trainable_engine_m->module~tensor_m module~tensor_range_m tensor_range_m module~trainable_engine_m->module~tensor_range_m module~training_configuration_m training_configuration_m module~trainable_engine_m->module~training_configuration_m sourcery_string_m sourcery_string_m module~trainable_engine_m->sourcery_string_m module~activation_strategy_m activation_strategy_m module~differentiable_activation_strategy_m->module~activation_strategy_m module~inference_engine_m_->module~differentiable_activation_strategy_m module~inference_engine_m_->module~kind_parameters_m module~inference_engine_m_->module~tensor_m module~inference_engine_m_->module~tensor_range_m module~inference_engine_m_->sourcery_string_m module~inference_engine_m_->module~activation_strategy_m sourcery_file_m sourcery_file_m module~inference_engine_m_->sourcery_file_m module~mini_batch_m->module~kind_parameters_m module~input_output_pair_m input_output_pair_m module~mini_batch_m->module~input_output_pair_m module~tensor_m->module~kind_parameters_m module~tensor_range_m->module~tensor_m sourcery_m sourcery_m module~tensor_range_m->sourcery_m module~training_configuration_m->module~differentiable_activation_strategy_m module~training_configuration_m->module~kind_parameters_m module~training_configuration_m->sourcery_string_m module~hyperparameters_m hyperparameters_m module~training_configuration_m->module~hyperparameters_m module~network_configuration_m network_configuration_m module~training_configuration_m->module~network_configuration_m module~training_configuration_m->sourcery_file_m module~activation_strategy_m->module~kind_parameters_m module~activation_strategy_m->sourcery_string_m module~hyperparameters_m->module~kind_parameters_m module~hyperparameters_m->sourcery_string_m module~input_output_pair_m->module~kind_parameters_m module~input_output_pair_m->module~tensor_m module~network_configuration_m->sourcery_string_m

Used by

  • module~~trainable_engine_m~~UsedByGraph module~trainable_engine_m trainable_engine_m module~inference_engine_m inference_engine_m module~inference_engine_m->module~trainable_engine_m module~trainable_engine_s trainable_engine_s module~trainable_engine_s->module~trainable_engine_m module~addition_m addition_m module~addition_m->module~inference_engine_m module~exponentiation_m exponentiation_m module~exponentiation_m->module~inference_engine_m module~multiply_inputs multiply_inputs module~multiply_inputs->module~inference_engine_m module~power_series power_series module~power_series->module~inference_engine_m module~saturated_mixing_ratio_m saturated_mixing_ratio_m module~saturated_mixing_ratio_m->module~inference_engine_m module~thompson_tensors_m thompson_tensors_m module~thompson_tensors_m->module~inference_engine_m module~training_configuration_s training_configuration_s module~training_configuration_s->module~inference_engine_m program~concurrent_inferences concurrent_inferences program~concurrent_inferences->module~inference_engine_m program~learn_addition learn_addition program~learn_addition->module~inference_engine_m program~learn_addition->module~addition_m program~learn_exponentiation learn_exponentiation program~learn_exponentiation->module~inference_engine_m program~learn_exponentiation->module~exponentiation_m program~learn_microphysics_procedures learn_microphysics_procedures program~learn_microphysics_procedures->module~inference_engine_m program~learn_microphysics_procedures->module~thompson_tensors_m program~learn_multiplication learn_multiplication program~learn_multiplication->module~inference_engine_m program~learn_multiplication->module~multiply_inputs program~learn_power_series learn_power_series program~learn_power_series->module~inference_engine_m program~learn_power_series->module~power_series program~print_training_configuration print_training_configuration program~print_training_configuration->module~inference_engine_m program~train_and_write train_and_write program~train_and_write->module~inference_engine_m program~train_saturated_mixture_ratio train_saturated_mixture_ratio program~train_saturated_mixture_ratio->module~inference_engine_m program~train_saturated_mixture_ratio->module~saturated_mixing_ratio_m program~write_read_infer write_read_infer program~write_read_infer->module~inference_engine_m

Variables

Type Visibility Attributes Name Initial
integer, private, parameter :: input_layer = 0

Interfaces

public interface trainable_engine_t

  • private pure module function construct_from_inference_engine(inference_engine) result(trainable_engine)

    Arguments

    Type IntentOptional Attributes Name
    type(inference_engine_t), intent(in) :: inference_engine

    Return Value type(trainable_engine_t)

  • private pure module function construct_from_padded_arrays(nodes, weights, biases, differentiable_activation_strategy, metadata, input_range, output_range) result(trainable_engine)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: nodes(input_layer:)
    real(kind=rkind), intent(in) :: weights(:,:,:)
    real(kind=rkind), intent(in) :: biases(:,:)
    class(differentiable_activation_strategy_t), intent(in) :: differentiable_activation_strategy
    type(string_t), intent(in) :: metadata(:)
    type(tensor_range_t), intent(in), optional :: input_range
    type(tensor_range_t), intent(in), optional :: output_range

    Return Value type(trainable_engine_t)

  • private module function perturbed_identity_network(training_configuration, perturbation_magnitude, metadata, input_range, output_range) result(trainable_engine)

    Arguments

    Type IntentOptional Attributes Name
    type(training_configuration_t), intent(in) :: training_configuration
    real(kind=rkind), intent(in) :: perturbation_magnitude
    type(string_t), intent(in) :: metadata(:)
    type(tensor_range_t) :: input_range
    type(tensor_range_t) :: output_range

    Return Value type(trainable_engine_t)

interface

interface

interface

  • private elemental module function map_from_input_training_range(self, tensor) result(unnormalized_tensor)

    Arguments

    Type IntentOptional Attributes Name
    class(trainable_engine_t), intent(in) :: self
    type(tensor_t), intent(in) :: tensor

    Return Value type(tensor_t)

interface

  • private elemental module function map_from_output_training_range(self, tensor) result(unnormalized_tensor)

    Arguments

    Type IntentOptional Attributes Name
    class(trainable_engine_t), intent(in) :: self
    type(tensor_t), intent(in) :: tensor

    Return Value type(tensor_t)

interface

  • private elemental module function map_to_input_training_range(self, tensor) result(normalized_tensor)

    Arguments

    Type IntentOptional Attributes Name
    class(trainable_engine_t), intent(in) :: self
    type(tensor_t), intent(in) :: tensor

    Return Value type(tensor_t)

interface

  • private elemental module function map_to_output_training_range(self, tensor) result(normalized_tensor)

    Arguments

    Type IntentOptional Attributes Name
    class(trainable_engine_t), intent(in) :: self
    type(tensor_t), intent(in) :: tensor

    Return Value type(tensor_t)

interface

  • private elemental module function num_inputs(self) result(n_in)

    Arguments

    Type IntentOptional Attributes Name
    class(trainable_engine_t), intent(in) :: self

    Return Value integer

interface

  • private elemental module function num_layers(self) result(n_layers)

    Arguments

    Type IntentOptional Attributes Name
    class(trainable_engine_t), intent(in) :: self

    Return Value integer

interface

  • private elemental module function num_outputs(self) result(n_out)

    Arguments

    Type IntentOptional Attributes Name
    class(trainable_engine_t), intent(in) :: self

    Return Value integer

interface

interface

  • private pure module subroutine train(self, mini_batches_arr, cost, adam, learning_rate)

    Arguments

    Type IntentOptional Attributes Name
    class(trainable_engine_t), intent(inout) :: self
    type(mini_batch_t), intent(in) :: mini_batches_arr(:)
    real(kind=rkind), intent(out), optional, allocatable :: cost(:)
    logical, intent(in) :: adam
    real(kind=rkind), intent(in) :: learning_rate

Derived Types

type, public ::  trainable_engine_t

Encapsulate the information needed to perform training

Components

Type Visibility Attributes Name Initial
real(kind=rkind), private, allocatable :: b(:,:)
class(differentiable_activation_strategy_t), private, allocatable :: differentiable_activation_strategy_
type(tensor_range_t), private :: input_range_
type(string_t), private, allocatable :: metadata_(:)
integer, private, allocatable :: n(:)
type(tensor_range_t), private :: output_range_
real(kind=rkind), private, allocatable :: w(:,:,:)

Constructor

private pure, module function construct_from_inference_engine (inference_engine)
private pure, module function construct_from_padded_arrays (nodes, weights, biases, differentiable_activation_strategy, metadata, input_range, output_range)
private module function perturbed_identity_network (training_configuration, perturbation_magnitude, metadata, input_range, output_range)

Type-Bound Procedures

procedure, public :: assert_consistent
procedure, public :: infer
procedure, public :: map_from_input_training_range
procedure, public :: map_from_output_training_range
procedure, public :: map_to_input_training_range
procedure, public :: map_to_output_training_range
procedure, public :: num_inputs
procedure, public :: num_layers
procedure, public :: num_outputs
procedure, public :: to_inference_engine
procedure, public :: train