| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | submodule(athena__base_layer) athena__base_layer_submodule_init | ||
| 2 | !! Submodule containing the implementation of the base layer types | ||
| 3 | !! | ||
| 4 | !! This submodule contains the implementation of the base layer types | ||
| 5 | !! used in the ATHENA library. The base layer types are the abstract | ||
| 6 | !! types from which all other layer types are derived. The submodule | ||
| 7 | !! contains the implementation of the initialisation procedures | ||
| 8 | use coreutils, only: stop_program | ||
| 9 | use athena__diffstruc_extd, only: batchnorm_array_type | ||
| 10 | |||
| 11 | contains | ||
| 12 | |||
| 13 | !############################################################################### | ||
| 14 |
1/2✓ Branch 0 taken 43 times.
✗ Branch 1 not taken.
|
43 | module subroutine init_pad(this, input_shape, verbose) |
| 15 | !! Initialise padding layer | ||
| 16 | implicit none | ||
| 17 | |||
| 18 | ! Arguments | ||
| 19 | class(pad_layer_type), intent(inout) :: this | ||
| 20 | !! Instance of the padding layer | ||
| 21 | integer, dimension(:), intent(in) :: input_shape | ||
| 22 | !! Input shape | ||
| 23 | integer, optional, intent(in) :: verbose | ||
| 24 | !! Verbosity level | ||
| 25 | |||
| 26 | ! Local variables | ||
| 27 | integer :: i | ||
| 28 | !! Loop index | ||
| 29 | integer :: verbose_ = 0 | ||
| 30 | !! Verbosity level | ||
| 31 | |||
| 32 | |||
| 33 | !--------------------------------------------------------------------------- | ||
| 34 | ! Initialise optional arguments | ||
| 35 | !--------------------------------------------------------------------------- | ||
| 36 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 43 times.
|
43 | if(present(verbose)) verbose_ = verbose |
| 37 | |||
| 38 | |||
| 39 | !--------------------------------------------------------------------------- | ||
| 40 | ! Initialise input shape | ||
| 41 | !--------------------------------------------------------------------------- | ||
| 42 |
4/8✓ Branch 0 taken 43 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 43 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 43 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 43 times.
|
43 | if(.not.allocated(this%input_shape)) call this%set_shape(input_shape) |
| 43 |
1/2✓ Branch 0 taken 43 times.
✗ Branch 1 not taken.
|
43 | if(.not.allocated(this%orig_bound))then |
| 44 |
8/16✓ Branch 0 taken 43 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 43 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 43 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 43 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 43 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 43 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 43 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 43 times.
|
43 | allocate(this%orig_bound(2,this%input_rank-1)) |
| 45 |
8/16✓ Branch 0 taken 43 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 43 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 43 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 43 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 43 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 43 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 43 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 43 times.
|
43 | allocate(this%dest_bound(2,this%input_rank-1)) |
| 46 | end if | ||
| 47 |
2/2✓ Branch 0 taken 86 times.
✓ Branch 1 taken 43 times.
|
129 | do i = 1, this%input_rank - 1 |
| 48 |
11/20✗ Branch 0 not taken.
✓ Branch 1 taken 86 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 86 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 86 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 86 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 86 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 86 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 86 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 86 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 86 times.
✓ Branch 27 taken 172 times.
✓ Branch 28 taken 86 times.
|
258 | this%orig_bound(:,i) = [ 1, this%input_shape(i) ] |
| 49 |
13/24✗ Branch 0 not taken.
✓ Branch 1 taken 86 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 86 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 86 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 86 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 86 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 86 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 86 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 86 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 86 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 86 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 86 times.
✓ Branch 33 taken 172 times.
✓ Branch 34 taken 86 times.
|
258 | this%dest_bound(:,i) = [ 1, this%input_shape(i) + this%pad(i) * 2 ] |
| 50 | 172 | call this%facets(i)%setup_bounds( & | |
| 51 | 344 | length = this%input_shape(:this%input_rank-1), & | |
| 52 | pad = this%pad, & | ||
| 53 | imethod = this%imethod & | ||
| 54 |
6/12✗ Branch 0 not taken.
✓ Branch 1 taken 86 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 86 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 86 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 86 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 86 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 86 times.
|
129 | ) |
| 55 | end do | ||
| 56 | |||
| 57 | |||
| 58 | !--------------------------------------------------------------------------- | ||
| 59 | ! Set up number of channels, width, height | ||
| 60 | !--------------------------------------------------------------------------- | ||
| 61 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 43 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 43 times.
|
43 | this%num_channels = this%input_shape(this%input_rank) |
| 62 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 43 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
43 | if(allocated(this%output_shape)) deallocate(this%output_shape) |
| 63 |
7/14✓ Branch 0 taken 43 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 43 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 43 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 43 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 43 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 43 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 43 times.
|
43 | allocate( this%output_shape(this%input_rank) ) |
| 64 |
4/8✗ Branch 0 not taken.
✓ Branch 1 taken 43 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 43 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 43 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 43 times.
|
43 | this%output_shape(this%input_rank) = this%input_shape(this%input_rank) |
| 65 | 215 | this%output_shape(:this%input_rank-1) = & | |
| 66 |
16/30✗ Branch 0 not taken.
✓ Branch 1 taken 43 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 43 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 43 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 43 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 43 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 43 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 43 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 43 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 43 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 43 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 43 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 43 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 43 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 43 times.
✓ Branch 42 taken 86 times.
✓ Branch 43 taken 43 times.
|
129 | this%input_shape(:this%input_rank-1) + this%pad(:) * 2 |
| 67 | |||
| 68 | |||
| 69 | !--------------------------------------------------------------------------- | ||
| 70 | ! Allocate arrays | ||
| 71 | !--------------------------------------------------------------------------- | ||
| 72 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 43 times.
|
43 | if(this%use_graph_input)then |
| 73 | ✗ | call stop_program("Graph input not supported for padding layer") | |
| 74 | ✗ | return | |
| 75 | end if | ||
| 76 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 43 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
43 | if(allocated(this%output)) deallocate(this%output) |
| 77 |
15/26✗ Branch 0 not taken.
✓ Branch 1 taken 43 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 43 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 43 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 43 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 43 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 43 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 43 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 43 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 43 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 43 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 43 times.
✓ Branch 33 taken 43 times.
✓ Branch 34 taken 43 times.
✓ Branch 35 taken 43 times.
✓ Branch 36 taken 43 times.
|
129 | allocate( this%output(1,1) ) |
| 78 | |||
| 79 | end subroutine init_pad | ||
| 80 | !############################################################################### | ||
| 81 | |||
| 82 | |||
| 83 | !############################################################################### | ||
| 84 |
1/2✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
|
20 | module subroutine init_pool(this, input_shape, verbose) |
| 85 | !! Initialise pooling layer | ||
| 86 | implicit none | ||
| 87 | |||
| 88 | ! Arguments | ||
| 89 | class(pool_layer_type), intent(inout) :: this | ||
| 90 | !! Instance of the pooling layer | ||
| 91 | integer, dimension(:), intent(in) :: input_shape | ||
| 92 | !! Input shape | ||
| 93 | integer, optional, intent(in) :: verbose | ||
| 94 | !! Verbosity level | ||
| 95 | |||
| 96 | ! Local variables | ||
| 97 | integer :: verbose_ = 0 | ||
| 98 | !! Verbosity level | ||
| 99 | |||
| 100 | |||
| 101 | !--------------------------------------------------------------------------- | ||
| 102 | ! Initialise optional arguments | ||
| 103 | !--------------------------------------------------------------------------- | ||
| 104 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 18 times.
|
20 | if(present(verbose)) verbose_ = verbose |
| 105 | |||
| 106 | |||
| 107 | !--------------------------------------------------------------------------- | ||
| 108 | ! Initialise input shape | ||
| 109 | !--------------------------------------------------------------------------- | ||
| 110 |
4/8✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 20 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 20 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 20 times.
|
20 | if(.not.allocated(this%input_shape)) call this%set_shape(input_shape) |
| 111 | |||
| 112 | |||
| 113 | !--------------------------------------------------------------------------- | ||
| 114 | ! Set up number of channels, width, height | ||
| 115 | !--------------------------------------------------------------------------- | ||
| 116 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 20 times.
|
20 | this%num_channels = this%input_shape(this%input_rank) |
| 117 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
20 | if(allocated(this%output_shape)) deallocate(this%output_shape) |
| 118 |
7/14✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 20 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 20 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 20 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 20 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 20 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 20 times.
|
20 | allocate( this%output_shape(this%input_rank) ) |
| 119 |
4/8✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 20 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 20 times.
|
20 | this%output_shape(this%input_rank) = this%input_shape(this%input_rank) |
| 120 | 100 | this%output_shape(:this%input_rank-1) = & | |
| 121 | floor( & | ||
| 122 | 80 | ( & | |
| 123 | 100 | this%input_shape(:this%input_rank-1) - this%pool & | |
| 124 | 100 | ) / real(this%strd) & | |
| 125 |
22/42✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 20 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 20 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 20 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 20 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 20 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 20 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 20 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 20 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 20 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 20 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 20 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 20 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 20 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 20 times.
✗ Branch 48 not taken.
✓ Branch 49 taken 20 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 20 times.
✗ Branch 54 not taken.
✓ Branch 55 taken 20 times.
✓ Branch 57 taken 40 times.
✓ Branch 58 taken 20 times.
✓ Branch 59 taken 40 times.
✗ Branch 60 not taken.
|
60 | ) + 1 |
| 126 | |||
| 127 | |||
| 128 | !--------------------------------------------------------------------------- | ||
| 129 | ! Allocate arrays | ||
| 130 | !--------------------------------------------------------------------------- | ||
| 131 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
|
20 | if(this%use_graph_input)then |
| 132 | call stop_program( & | ||
| 133 | "Graph input not supported for pooling layer" & | ||
| 134 | ✗ | ) | |
| 135 | ✗ | return | |
| 136 | end if | ||
| 137 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
20 | if(allocated(this%output)) deallocate(this%output) |
| 138 |
15/26✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 20 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 20 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 20 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 20 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 20 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 20 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 20 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 20 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 20 times.
✓ Branch 33 taken 20 times.
✓ Branch 34 taken 20 times.
✓ Branch 35 taken 20 times.
✓ Branch 36 taken 20 times.
|
60 | allocate( this%output(1,1) ) |
| 139 | |||
| 140 | end subroutine init_pool | ||
| 141 | !############################################################################### | ||
| 142 | |||
| 143 | |||
| 144 | !############################################################################### | ||
| 145 |
1/2✓ Branch 0 taken 67 times.
✗ Branch 1 not taken.
|
67 | module subroutine init_conv(this, input_shape, verbose) |
| 146 | !! Initialise convolutional layer | ||
| 147 | use athena__initialiser, only: initialiser_setup | ||
| 148 | use athena__misc_types, only: base_init_type | ||
| 149 | implicit none | ||
| 150 | |||
| 151 | ! Arguments | ||
| 152 | class(conv_layer_type), intent(inout) :: this | ||
| 153 | !! Instance of the layer | ||
| 154 | integer, dimension(:), intent(in) :: input_shape | ||
| 155 | !! Input shape | ||
| 156 |
1/2✓ Branch 0 taken 67 times.
✗ Branch 1 not taken.
|
67 | integer, dimension(this%input_rank-1) :: pad_shape |
| 157 | integer, optional, intent(in) :: verbose | ||
| 158 | !! Verbosity level | ||
| 159 | |||
| 160 | ! Local variables | ||
| 161 | integer :: verbose_ = 0 | ||
| 162 | !! Verbosity level | ||
| 163 | |||
| 164 | |||
| 165 | !--------------------------------------------------------------------------- | ||
| 166 | ! initialise optional arguments | ||
| 167 | !--------------------------------------------------------------------------- | ||
| 168 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 63 times.
|
67 | if(present(verbose)) verbose_ = verbose |
| 169 | |||
| 170 | |||
| 171 | !--------------------------------------------------------------------------- | ||
| 172 | ! initialise input shape | ||
| 173 | !--------------------------------------------------------------------------- | ||
| 174 |
4/8✓ Branch 0 taken 67 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 67 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 67 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 67 times.
|
67 | if(.not.allocated(this%input_shape)) call this%set_shape(input_shape) |
| 175 | |||
| 176 | |||
| 177 | !--------------------------------------------------------------------------- | ||
| 178 | ! initialise padding layer, if allocated | ||
| 179 | !--------------------------------------------------------------------------- | ||
| 180 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
|
67 | if(allocated(this%pad_layer))then |
| 181 | ✗ | call this%pad_layer%init(this%input_shape, verbose_) | |
| 182 | ✗ | pad_shape = 2 * this%pad_layer%pad | |
| 183 | else | ||
| 184 |
5/8✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✓ Branch 9 taken 156 times.
✓ Branch 10 taken 67 times.
|
223 | pad_shape = 0 |
| 185 | end if | ||
| 186 | |||
| 187 | |||
| 188 | !--------------------------------------------------------------------------- | ||
| 189 | ! allocate output, activation, bias, and weight shapes | ||
| 190 | !--------------------------------------------------------------------------- | ||
| 191 | ! NOTE: INPUT SHAPE DOES NOT INCLUDE PADDING WIDTH | ||
| 192 | ! THIS IS HANDLED AUTOMATICALLY BY THE CODE | ||
| 193 | ! ... provide the initial input data shape and let us deal with the padding | ||
| 194 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
|
67 | this%num_channels = this%input_shape(this%input_rank) |
| 195 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
67 | if(allocated(this%output_shape)) deallocate(this%output_shape) |
| 196 |
7/14✓ Branch 0 taken 67 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 67 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 67 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 67 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 67 times.
|
67 | allocate( this%output_shape(this%input_rank) ) |
| 197 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
|
67 | this%output_shape(this%input_rank) = this%num_filters |
| 198 | 335 | this%output_shape(:this%input_rank-1) = floor( & | |
| 199 | 268 | ( & | |
| 200 | ✗ | this%input_shape(:this%input_rank-1) + pad_shape - this%knl & | |
| 201 | 335 | ) / real(this%stp) & | |
| 202 |
26/50✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 67 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 67 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 67 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 67 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 67 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 67 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 67 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 67 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 67 times.
✗ Branch 32 not taken.
✓ Branch 33 taken 67 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 67 times.
✗ Branch 38 not taken.
✓ Branch 39 taken 67 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 67 times.
✗ Branch 44 not taken.
✓ Branch 45 taken 67 times.
✗ Branch 47 not taken.
✓ Branch 48 taken 67 times.
✗ Branch 50 not taken.
✓ Branch 51 taken 67 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 67 times.
✗ Branch 56 not taken.
✓ Branch 57 taken 67 times.
✗ Branch 59 not taken.
✓ Branch 60 taken 67 times.
✗ Branch 62 not taken.
✓ Branch 63 taken 67 times.
✓ Branch 65 taken 156 times.
✓ Branch 66 taken 67 times.
✓ Branch 67 taken 156 times.
✗ Branch 68 not taken.
|
223 | ) + 1 |
| 203 | 67 | this%num_params = this%get_num_params() | |
| 204 |
8/16✓ Branch 0 taken 67 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 67 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 67 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 67 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 67 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 67 times.
|
67 | allocate(this%weight_shape(this%input_rank + 1,1)) |
| 205 |
15/26✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 67 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 67 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 67 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 67 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 67 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 67 times.
✓ Branch 26 taken 156 times.
✓ Branch 27 taken 67 times.
✗ Branch 28 not taken.
✓ Branch 29 taken 67 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 67 times.
✓ Branch 34 taken 290 times.
✓ Branch 35 taken 67 times.
|
513 | this%weight_shape(:,1) = [ this%knl, this%num_channels, this%num_filters ] |
| 206 |
4/8✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 67 times.
✓ Branch 7 taken 67 times.
|
134 | this%bias_shape = [this%num_filters] |
| 207 | |||
| 208 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
67 | if(allocated(this%params)) deallocate(this%params) |
| 209 |
16/30✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 67 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 67 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 67 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 67 times.
✓ Branch 21 taken 134 times.
✓ Branch 22 taken 67 times.
✓ Branch 23 taken 134 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 134 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 134 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 134 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 134 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 134 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 134 times.
|
201 | allocate(this%params(2)) |
| 210 |
14/24✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 67 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 67 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 67 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 67 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 67 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 67 times.
✓ Branch 27 taken 290 times.
✓ Branch 28 taken 67 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 67 times.
✓ Branch 31 taken 357 times.
✓ Branch 32 taken 67 times.
|
714 | call this%params(1)%allocate([this%weight_shape(:,1), 1]) |
| 211 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
|
67 | call this%params(1)%set_requires_grad(.true.) |
| 212 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
|
67 | this%params(1)%fix_pointer = .true. |
| 213 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
|
67 | this%params(1)%is_sample_dependent = .false. |
| 214 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
|
67 | this%params(1)%is_temporary = .false. |
| 215 |
12/20✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 67 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 67 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 67 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 67 times.
✓ Branch 21 taken 67 times.
✓ Branch 22 taken 67 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 67 times.
✓ Branch 25 taken 134 times.
✓ Branch 26 taken 67 times.
|
268 | call this%params(2)%allocate([this%bias_shape, 1]) |
| 216 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
|
67 | call this%params(2)%set_requires_grad(.true.) |
| 217 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
|
67 | this%params(2)%fix_pointer = .true. |
| 218 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
|
67 | this%params(2)%is_sample_dependent = .false. |
| 219 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
|
67 | this%params(2)%is_temporary = .false. |
| 220 | |||
| 221 | |||
| 222 | !--------------------------------------------------------------------------- | ||
| 223 | ! initialise weights (kernels) | ||
| 224 | !--------------------------------------------------------------------------- | ||
| 225 | call this%kernel_init%initialise( & | ||
| 226 | 670 | this%params(1)%val(:,1), & | |
| 227 | 268 | fan_in = product(this%knl)+1, fan_out = 1, & | |
| 228 | 268 | spacing = [ this%knl, this%num_channels, this%num_filters ] & | |
| 229 |
26/46✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 67 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 67 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 67 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 67 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 67 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 67 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 67 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 67 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 67 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 67 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 67 times.
✓ Branch 42 taken 156 times.
✓ Branch 43 taken 67 times.
✗ Branch 44 not taken.
✓ Branch 45 taken 67 times.
✗ Branch 47 not taken.
✓ Branch 48 taken 67 times.
✗ Branch 50 not taken.
✓ Branch 51 taken 67 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 67 times.
✗ Branch 56 not taken.
✓ Branch 57 taken 67 times.
✓ Branch 59 taken 156 times.
✓ Branch 60 taken 67 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 67 times.
✓ Branch 63 taken 290 times.
✓ Branch 64 taken 67 times.
|
669 | ) |
| 230 | |||
| 231 | ! initialise biases | ||
| 232 | !--------------------------------------------------------------------------- | ||
| 233 | call this%bias_init%initialise( & | ||
| 234 | 670 | this%params(2)%val(:,1), & | |
| 235 | 268 | fan_in = product(this%knl)+1, fan_out = 1 & | |
| 236 |
16/30✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 67 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 67 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 67 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 67 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 67 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 67 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 67 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 67 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 67 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 67 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 67 times.
✓ Branch 42 taken 156 times.
✓ Branch 43 taken 67 times.
|
223 | ) |
| 237 | |||
| 238 | |||
| 239 | !--------------------------------------------------------------------------- | ||
| 240 | ! Allocate arrays | ||
| 241 | !--------------------------------------------------------------------------- | ||
| 242 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
|
67 | if(this%use_graph_input)then |
| 243 | call stop_program( & | ||
| 244 | "Graph input not supported for convolutional layer" & | ||
| 245 | ✗ | ) | |
| 246 | ✗ | return | |
| 247 | end if | ||
| 248 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
67 | if(allocated(this%output)) deallocate(this%output) |
| 249 |
15/26✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 67 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 67 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 67 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 67 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 67 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 67 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 67 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 67 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 67 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 67 times.
✓ Branch 33 taken 67 times.
✓ Branch 34 taken 67 times.
✓ Branch 35 taken 67 times.
✓ Branch 36 taken 67 times.
|
201 | allocate( this%output(1,1) ) |
| 250 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
|
67 | if(this%z(1)%allocated) call this%z(1)%deallocate() |
| 251 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 67 times.
|
67 | if(this%z(2)%allocated) call this%z(2)%deallocate() |
| 252 | |||
| 253 | end subroutine init_conv | ||
| 254 | !############################################################################### | ||
| 255 | |||
| 256 | |||
| 257 | !############################################################################### | ||
| 258 |
1/2✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
|
15 | module subroutine init_batch(this, input_shape, verbose) |
| 259 | !! Initialise batch normalisation layer | ||
| 260 | use athena__initialiser, only: initialiser_setup | ||
| 261 | use athena__misc_types, only: base_init_type | ||
| 262 | implicit none | ||
| 263 | |||
| 264 | ! Arguments | ||
| 265 | class(batch_layer_type), intent(inout) :: this | ||
| 266 | !! Instance of the layer | ||
| 267 | integer, dimension(:), intent(in) :: input_shape | ||
| 268 | !! Input shape | ||
| 269 | integer, optional, intent(in) :: verbose | ||
| 270 | !! Verbosity level | ||
| 271 | |||
| 272 | integer :: verbose_ = 0 | ||
| 273 | |||
| 274 | |||
| 275 | !--------------------------------------------------------------------------- | ||
| 276 | ! initialise optional arguments | ||
| 277 | !--------------------------------------------------------------------------- | ||
| 278 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
|
15 | if(present(verbose)) verbose_ = verbose |
| 279 | |||
| 280 | |||
| 281 | !--------------------------------------------------------------------------- | ||
| 282 | ! initialise input shape | ||
| 283 | !--------------------------------------------------------------------------- | ||
| 284 |
4/8✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 15 times.
|
15 | if(.not.allocated(this%input_shape)) call this%set_shape(input_shape) |
| 285 | |||
| 286 | |||
| 287 | !--------------------------------------------------------------------------- | ||
| 288 | ! set up number of channels, width, height | ||
| 289 | !--------------------------------------------------------------------------- | ||
| 290 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
15 | if(allocated(this%output)) deallocate(this%output) |
| 291 |
7/14✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 15 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 15 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 15 times.
|
15 | allocate(this%output_shape(this%input_rank)) |
| 292 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
|
15 | if(size(this%input_shape).eq.1)then |
| 293 | ✗ | this%output_shape(1) = this%input_shape(1) | |
| 294 | ✗ | this%output_shape(2) = 1 | |
| 295 | else | ||
| 296 |
8/20✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 15 times.
✓ Branch 12 taken 15 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 15 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 42 times.
✓ Branch 23 taken 15 times.
|
57 | this%output_shape = this%input_shape |
| 297 | end if | ||
| 298 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
|
15 | this%num_channels = this%input_shape(this%input_rank) |
| 299 | 15 | this%num_params = this%get_num_params() | |
| 300 |
16/30✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 15 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 15 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 15 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 15 times.
✓ Branch 21 taken 15 times.
✓ Branch 22 taken 15 times.
✓ Branch 23 taken 15 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 15 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 15 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 15 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 15 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 15 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 15 times.
|
30 | allocate(this%params(1)) |
| 301 |
4/6✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✓ Branch 6 taken 30 times.
✓ Branch 7 taken 15 times.
|
45 | call this%params(1)%allocate([2 * this%num_channels, 1]) |
| 302 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
|
15 | call this%params(1)%set_requires_grad(.true.) |
| 303 |
3/6✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
|
15 | allocate(this%weight_shape(1,1)) |
| 304 |
9/16✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 15 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 15 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 15 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 15 times.
✓ Branch 21 taken 15 times.
✓ Branch 22 taken 15 times.
|
30 | this%weight_shape(:,1) = [ this%num_channels ] |
| 305 |
4/8✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 15 times.
✓ Branch 7 taken 15 times.
|
30 | this%bias_shape = [this%num_channels] |
| 306 | |||
| 307 | |||
| 308 | !--------------------------------------------------------------------------- | ||
| 309 | ! allocate mean and variance | ||
| 310 | !--------------------------------------------------------------------------- | ||
| 311 |
13/24✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 15 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 15 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 15 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 15 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 15 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 15 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 15 times.
✓ Branch 29 taken 40 times.
✓ Branch 30 taken 15 times.
|
55 | allocate(this%mean(this%num_channels), source=0._real32) |
| 312 |
18/34✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 15 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 15 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 15 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 15 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 15 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 15 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 15 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 15 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 15 times.
✗ Branch 32 not taken.
✓ Branch 33 taken 15 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 15 times.
✗ Branch 38 not taken.
✓ Branch 39 taken 15 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 15 times.
✓ Branch 44 taken 40 times.
✓ Branch 45 taken 15 times.
|
55 | allocate(this%variance, source=this%mean) |
| 313 | |||
| 314 | |||
| 315 | !--------------------------------------------------------------------------- | ||
| 316 | ! initialise gamma | ||
| 317 | !--------------------------------------------------------------------------- | ||
| 318 | 150 | call this%kernel_init%initialise(this%params(1)%val(1:this%num_channels,1), & | |
| 319 | fan_in =this%num_channels, & | ||
| 320 |
10/20✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 15 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 15 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 15 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 15 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 15 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 15 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 15 times.
|
15 | fan_out=this%num_channels) |
| 321 | |||
| 322 | ! initialise beta | ||
| 323 | !--------------------------------------------------------------------------- | ||
| 324 | 150 | call this%bias_init%initialise(this%params(1)%val(this%num_channels+1:,1), & | |
| 325 | fan_in =this%num_channels, & | ||
| 326 |
10/20✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 15 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 15 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 15 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 15 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 15 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 15 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 15 times.
|
15 | fan_out=this%num_channels) |
| 327 | |||
| 328 | |||
| 329 | !--------------------------------------------------------------------------- | ||
| 330 | ! initialise moving mean | ||
| 331 | !--------------------------------------------------------------------------- | ||
| 332 | 60 | call this%moving_mean_init%initialise(this%mean, & | |
| 333 | fan_in =this%num_channels, & | ||
| 334 |
4/8✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 15 times.
|
15 | fan_out=this%num_channels) |
| 335 | |||
| 336 | ! initialise moving variance | ||
| 337 | !--------------------------------------------------------------------------- | ||
| 338 | 60 | call this%moving_variance_init%initialise(this%variance, & | |
| 339 | fan_in =this%num_channels, & | ||
| 340 |
4/8✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 15 times.
|
15 | fan_out=this%num_channels) |
| 341 | |||
| 342 | |||
| 343 | !--------------------------------------------------------------------------- | ||
| 344 | ! Allocate arrays | ||
| 345 | !--------------------------------------------------------------------------- | ||
| 346 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
|
15 | if(this%use_graph_input)then |
| 347 | call stop_program( & | ||
| 348 | "Graph input not supported for batch normalisation layer" & | ||
| 349 | ✗ | ) | |
| 350 | ✗ | return | |
| 351 | end if | ||
| 352 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
15 | if(allocated(this%output)) deallocate(this%output) |
| 353 |
15/26✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 15 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 15 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 15 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 15 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 15 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 15 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 15 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 15 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 15 times.
✓ Branch 33 taken 15 times.
✓ Branch 34 taken 15 times.
✓ Branch 35 taken 15 times.
✓ Branch 36 taken 15 times.
|
45 | allocate( batchnorm_array_type :: this%output(1,1) ) |
| 354 | |||
| 355 | end subroutine init_batch | ||
| 356 | !############################################################################### | ||
| 357 | |||
| 358 | end submodule athena__base_layer_submodule_init | ||
| 359 |