set_hyperparams_conv3d Subroutine

private subroutine set_hyperparams_conv3d(this, num_filters, kernel_size, stride, dilation, padding, use_bias, activation, kernel_initialiser, bias_initialiser, verbose)

Set hyperparameters for 3D convolutional layer

Type Bound

conv3d_layer_type

Arguments

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

Instance of the 3D convolutional layer

integer, intent(in) :: num_filters

Number of filters

integer, intent(in), dimension(3) :: kernel_size

Kernel size, stride, dilation

integer, intent(in), dimension(3) :: stride

Kernel size, stride, dilation

integer, intent(in), dimension(3) :: dilation

Kernel size, stride, dilation

character(len=*), intent(in) :: padding

Padding

logical, intent(in) :: use_bias

Use bias

class(base_actv_type), intent(in), allocatable :: activation

Activation function

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

Kernel and bias initialisers

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

Kernel and bias initialisers

integer, intent(in), optional :: verbose

Verbosity level


Source Code

  subroutine set_hyperparams_conv3d( &
       this, &
       num_filters, &
       kernel_size, stride, dilation, &
       padding, &
       use_bias, &
       activation, &
       kernel_initialiser, bias_initialiser, &
       verbose &
  )
    !! Set hyperparameters for 3D convolutional layer
    use athena__activation,  only: activation_setup
    use athena__initialiser, only: get_default_initialiser, initialiser_setup
    use coreutils, only: to_lower
    implicit none

    ! Arguments
    class(conv3d_layer_type), intent(inout) :: this
    !! Instance of the 3D convolutional layer
    integer, intent(in) :: num_filters
    !! Number of filters
    integer, dimension(3), intent(in) :: kernel_size, stride, dilation
    !! Kernel size, stride, dilation
    character(*), intent(in) :: padding
    !! Padding
    logical, intent(in) :: use_bias
    !! Use bias
    class(base_actv_type), allocatable, intent(in) :: activation
    !! Activation function
    class(base_init_type), allocatable, intent(in) :: &
         kernel_initialiser, bias_initialiser
    !! Kernel and bias initialisers
    integer, optional, intent(in) :: verbose
    !! Verbosity level

    ! Local variables
    character(len=20) :: padding_
    character(len=256) :: buffer

    this%name = "conv3d"
    this%type = "conv"
    this%input_rank = 4
    this%output_rank = 4
    this%use_bias = use_bias
    if(allocated(this%dil)) deallocate(this%dil)
    if(allocated(this%knl)) deallocate(this%knl)
    if(allocated(this%stp)) deallocate(this%stp)
    allocate( &
         this%dil(this%input_rank-1), &
         this%knl(this%input_rank-1), &
         this%stp(this%input_rank-1) &
    )
    this%dil = dilation
    this%knl = kernel_size
    this%stp = stride
    this%num_filters = num_filters
    padding_ = trim(adjustl(padding))

    select case(trim(adjustl(to_lower(padding_))))
    case("valid", "none", "")
    case default
       this%pad_layer = pad3d_layer_type( &
            padding = [ (this%knl-1)/2 ], &
            method = padding_ &
       )
    end select
    if(allocated(this%activation)) deallocate(this%activation)
    if(.not.allocated(activation))then
       this%activation = activation_setup("none")
    else
       allocate(this%activation, source=activation)
    end if
    if(allocated(this%kernel_init)) deallocate(this%kernel_init)
    if(.not.allocated(kernel_initialiser))then
       buffer = get_default_initialiser(this%activation%name)
       this%kernel_init = initialiser_setup(buffer)
    else
       allocate(this%kernel_init, source=kernel_initialiser)
    end if
    if(allocated(this%bias_init)) deallocate(this%bias_init)
    if(.not.allocated(bias_initialiser))then
       buffer = get_default_initialiser( &
            this%activation%name, &
            is_bias=.true. &
       )
       this%bias_init = initialiser_setup(buffer)
    else
       allocate(this%bias_init, source=bias_initialiser)
    end if
    if(present(verbose))then
       if(abs(verbose).gt.0)then
          write(*,'("CONV3D activation function: ",A)') &
               trim(this%activation%name)
          write(*,'("CONV3D kernel initialiser: ",A)') &
               trim(this%kernel_init%name)
          write(*,'("CONV3D bias initialiser: ",A)') &
               trim(this%bias_init%name)
       end if
    end if

  end subroutine set_hyperparams_conv3d