Set the hyperparameters for fully connected layer
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(full_layer_type), | intent(inout) | :: | this |
Instance of the fully connected layer |
||
| integer, | intent(in) | :: | num_outputs |
Number of outputs |
||
| logical, | intent(in) | :: | use_bias |
Whether to 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 |
subroutine set_hyperparams_full( & this, num_outputs, & use_bias, & activation, & kernel_initialiser, bias_initialiser, & verbose & ) !! Set the hyperparameters for fully connected layer use athena__activation, only: activation_setup use athena__initialiser, only: get_default_initialiser, initialiser_setup use athena__initialiser_data, only: data_init_type implicit none ! Arguments class(full_layer_type), intent(inout) :: this !! Instance of the fully connected layer integer, intent(in) :: num_outputs !! Number of outputs logical, intent(in) :: use_bias !! Whether to 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=256) :: buffer this%name = "full" this%type = "full" this%input_rank = 1 this%output_rank = 1 this%use_bias = use_bias this%num_outputs = num_outputs 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 select type(kernel_init_in => kernel_initialiser) class is(data_init_type) allocate(data_init_type :: this%kernel_init) select type(kernel_init_out => this%kernel_init) type is(data_init_type) kernel_init_out%name = kernel_init_in%name allocate(kernel_init_out%data(size(kernel_init_in%data))) kernel_init_out%data = kernel_init_in%data end select class default allocate(this%kernel_init, source=kernel_initialiser) end select 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 if(allocated(this%bias_init)) deallocate(this%bias_init) select type(bias_init_in => bias_initialiser) class is(data_init_type) allocate(data_init_type :: this%bias_init) select type(bias_init_out => this%bias_init) type is(data_init_type) bias_init_out%name = bias_init_in%name allocate(bias_init_out%data(size(bias_init_in%data))) bias_init_out%data = bias_init_in%data end select class default allocate(this%bias_init, source=bias_initialiser) end select end if if(present(verbose))then if(abs(verbose).gt.0)then write(*,'("FULL activation function: ",A)') & trim(this%activation%name) write(*,'("FULL kernel initialiser: ",A)') & trim(this%kernel_init%name) write(*,'("FULL bias initialiser: ",A)') & trim(this%bias_init%name) end if end if end subroutine set_hyperparams_full