set_hyperparams_batchnorm1d Subroutine

private subroutine set_hyperparams_batchnorm1d(this, momentum, epsilon, gamma_init_mean, gamma_init_std, beta_init_mean, beta_init_std, gamma_initialiser, beta_initialiser, moving_mean_initialiser, moving_variance_initialiser, verbose)

Set hyperparameters for 1D batch normalisation layer

Type Bound

batchnorm1d_layer_type

Arguments

Type IntentOptional Attributes Name
class(batchnorm1d_layer_type), intent(inout) :: this

Instance of the 1D batch normalisation layer

real(kind=real32), intent(in) :: momentum

Momentum and epsilon

real(kind=real32), intent(in) :: epsilon

Momentum and epsilon

real(kind=real32), intent(in) :: gamma_init_mean

Gamma initialisation mean and standard deviation

real(kind=real32), intent(in) :: gamma_init_std

Gamma initialisation mean and standard deviation

real(kind=real32), intent(in) :: beta_init_mean

Beta initialisation mean and standard deviation

real(kind=real32), intent(in) :: beta_init_std

Beta initialisation mean and standard deviation

class(base_init_type), intent(in), allocatable :: gamma_initialiser

Gamma and beta initialisers

class(base_init_type), intent(in), allocatable :: beta_initialiser

Gamma and beta initialisers

class(base_init_type), intent(in), allocatable :: moving_mean_initialiser

Moving mean and variance initialisers

class(base_init_type), intent(in), allocatable :: moving_variance_initialiser

Moving mean and variance initialisers

integer, intent(in), optional :: verbose

Verbosity level


Source Code

  subroutine set_hyperparams_batchnorm1d( &
       this, &
       momentum, epsilon, &
       gamma_init_mean, gamma_init_std, &
       beta_init_mean, beta_init_std, &
       gamma_initialiser, beta_initialiser, &
       moving_mean_initialiser, moving_variance_initialiser, &
       verbose )
    !! Set hyperparameters for 1D batch normalisation layer
    use athena__initialiser, only: initialiser_setup
    implicit none

    ! Arguments
    class(batchnorm1d_layer_type), intent(inout) :: this
    !! Instance of the 1D batch normalisation layer
    real(real32), intent(in) :: momentum, epsilon
    !! Momentum and epsilon
    real(real32), intent(in) :: gamma_init_mean, gamma_init_std
    !! Gamma initialisation mean and standard deviation
    real(real32), intent(in) :: beta_init_mean, beta_init_std
    !! Beta initialisation mean and standard deviation
    class(base_init_type), allocatable, intent(in) :: &
         gamma_initialiser, beta_initialiser
    !! Gamma and beta initialisers
    class(base_init_type), allocatable, intent(in) :: &
         moving_mean_initialiser, moving_variance_initialiser
    !! Moving mean and variance initialisers
    integer, optional, intent(in) :: verbose
    !! Verbosity level


    this%name = "batchnorm1d"
    this%type = "batc"
    this%input_rank = 2
    this%output_rank = 2
    this%use_bias = .true.
    this%momentum = momentum
    this%epsilon = epsilon
    if(allocated(this%kernel_init)) deallocate(this%kernel_init)
    if(.not.allocated(gamma_initialiser))then
       this%kernel_init = initialiser_setup('ones')
    else
       allocate(this%kernel_init, source=gamma_initialiser)
    end if
    if(allocated(this%bias_init)) deallocate(this%bias_init)
    if(.not.allocated(beta_initialiser))then
       this%bias_init = initialiser_setup('zeros')
    else
       allocate(this%bias_init, source=beta_initialiser)
    end if
    if(.not.allocated(moving_mean_initialiser))then
       this%moving_mean_init = initialiser_setup('zeros')
    else
       this%moving_mean_init = moving_mean_initialiser
    end if
    if(.not.allocated(moving_variance_initialiser))then
       this%moving_variance_init = initialiser_setup('ones')
    else
       this%moving_variance_init = moving_variance_initialiser
    end if
    this%gamma_init_mean = gamma_init_mean
    this%gamma_init_std  = gamma_init_std
    this%beta_init_mean  = beta_init_mean
    this%beta_init_std   = beta_init_std
    this%kernel_init%mean = this%gamma_init_mean
    this%kernel_init%std  = this%gamma_init_std
    this%bias_init%mean = this%beta_init_mean
    this%bias_init%std  = this%beta_init_std
    if(present(verbose))then
       if(abs(verbose).gt.0)then
          write(*,'("BATCHNORM1D gamma (kernel) initialiser: ",A)') &
               trim(this%kernel_init%name)
          write(*,'("BATCHNORM1D beta (bias) initialiser: ",A)') &
               trim(this%bias_init%name)
          write(*,'("BATCHNORM1D moving mean initialiser: ",A)') &
               trim(this%moving_mean_init%name)
          write(*,'("BATCHNORM1D moving variance initialiser: ",A)') &
               trim(this%moving_variance_init%name)
       end if
    end if

  end subroutine set_hyperparams_batchnorm1d