GCC Code Coverage Report


Directory: src/lib/
File: src/lib/mod_container_layer_sub.f90
Date: 2024-06-28 12:51:18
Exec Total Coverage
Lines: 17 47 36.2%
Functions: 0 0 -%
Branches: 226 1316 17.2%

Line Branch Exec Source
1 !!!#############################################################################
2 !!! Code written by Ned Thaddeus Taylor
3 !!! Code part of the ATHENA library - a feedforward neural network library
4 !!!#############################################################################
5 !!! submodule of the container_layer module
6 !!! submodule contains the associated methods from the container_layer module
7 !!!#############################################################################
8 submodule(container_layer) container_layer_submodule
9 use base_layer, only: learnable_layer_type, flatten_layer_type
10 use input1d_layer, only: input1d_layer_type
11 use input2d_layer, only: input2d_layer_type
12 use input3d_layer, only: input3d_layer_type
13 use input4d_layer, only: input4d_layer_type
14 use batchnorm1d_layer, only: batchnorm1d_layer_type
15 use batchnorm2d_layer, only: batchnorm2d_layer_type
16 use batchnorm3d_layer, only: batchnorm3d_layer_type
17 use conv1d_layer, only: conv1d_layer_type
18 use conv2d_layer, only: conv2d_layer_type
19 use conv3d_layer, only: conv3d_layer_type
20 use dropout_layer, only: dropout_layer_type
21 use dropblock2d_layer, only: dropblock2d_layer_type
22 use dropblock3d_layer, only: dropblock3d_layer_type
23 use avgpool1d_layer, only: avgpool1d_layer_type
24 use avgpool2d_layer, only: avgpool2d_layer_type
25 use avgpool3d_layer, only: avgpool3d_layer_type
26 use maxpool1d_layer, only: maxpool1d_layer_type
27 use maxpool2d_layer, only: maxpool2d_layer_type
28 use maxpool3d_layer, only: maxpool3d_layer_type
29 use full_layer, only: full_layer_type
30
31 contains
32
33 1026 pure module subroutine forward(this, input)
34 implicit none
35 class(container_layer_type), intent(inout) :: this
36 class(container_layer_type), intent(in) :: input
37
38 select type(previous => input%layer)
39 type is(input1d_layer_type)
40
8/16
✗ Branch 0 not taken.
✓ Branch 1 taken 517 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 517 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 517 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 517 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 517 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 517 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 517 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 517 times.
517 call this%layer%forward(previous%output)
41 type is(input2d_layer_type)
42 call this%layer%forward(previous%output)
43 type is(input3d_layer_type)
44
16/32
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 2 times.
2 call this%layer%forward(previous%output)
45 type is(input4d_layer_type)
46
20/40
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 2 times.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
2 call this%layer%forward(previous%output)
47
48 type is(batchnorm1d_layer_type)
49 call this%layer%forward(previous%output)
50 type is(batchnorm2d_layer_type)
51 call this%layer%forward(previous%output)
52 type is(batchnorm3d_layer_type)
53 call this%layer%forward(previous%output)
54
55 type is(conv1d_layer_type)
56 call this%layer%forward(previous%output)
57 type is(conv2d_layer_type)
58
16/32
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 2 times.
2 call this%layer%forward(previous%output)
59 type is(conv3d_layer_type)
60
20/40
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 2 times.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
2 call this%layer%forward(previous%output)
61
62 type is(dropout_layer_type)
63 call this%layer%forward(previous%output)
64 type is(dropblock2d_layer_type)
65 call this%layer%forward(previous%output)
66 type is(dropblock3d_layer_type)
67 call this%layer%forward(previous%output)
68
69 type is(avgpool1d_layer_type)
70 call this%layer%forward(previous%output)
71 type is(avgpool2d_layer_type)
72 call this%layer%forward(previous%output)
73 type is(avgpool3d_layer_type)
74 call this%layer%forward(previous%output)
75 type is(maxpool1d_layer_type)
76 call this%layer%forward(previous%output)
77 type is(maxpool2d_layer_type)
78 call this%layer%forward(previous%output)
79 type is(maxpool3d_layer_type)
80 call this%layer%forward(previous%output)
81
82 class is(flatten_layer_type)
83 call this%layer%forward(previous%output)
84
85 type is(full_layer_type)
86
8/16
✗ Branch 0 not taken.
✓ Branch 1 taken 501 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 501 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 501 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 501 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 501 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 501 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 501 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 501 times.
501 call this%layer%forward(previous%output)
87 end select
88
89 1026 end subroutine forward
90
91
92 1012 pure module subroutine backward(this, input, gradient)
93 implicit none
94 class(container_layer_type), intent(inout) :: this
95 class(container_layer_type), intent(in) :: input
96 real(real12), dimension(..), intent(in) :: gradient
97
98 select type(previous => input%layer)
99 type is(input1d_layer_type)
100
8/16
✗ Branch 0 not taken.
✓ Branch 1 taken 508 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 508 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 508 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 508 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 508 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 508 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 508 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 508 times.
508 call this%layer%backward(previous%output, gradient)
101 type is(input2d_layer_type)
102 call this%layer%backward(previous%output, gradient)
103 type is(input3d_layer_type)
104
16/32
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 1 times.
1 call this%layer%backward(previous%output, gradient)
105 type is(input4d_layer_type)
106
20/40
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 48 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 54 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 1 times.
1 call this%layer%backward(previous%output, gradient)
107
108 type is(batchnorm1d_layer_type)
109 call this%layer%backward(previous%output, gradient)
110 type is(batchnorm2d_layer_type)
111 call this%layer%backward(previous%output, gradient)
112 type is(batchnorm3d_layer_type)
113 call this%layer%backward(previous%output, gradient)
114
115 type is(conv1d_layer_type)
116 call this%layer%backward(previous%output, gradient)
117 type is(conv2d_layer_type)
118
16/32
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 1 times.
1 call this%layer%backward(previous%output, gradient)
119 type is(conv3d_layer_type)
120
20/40
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 48 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 54 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 1 times.
1 call this%layer%backward(previous%output, gradient)
121
122 type is(dropout_layer_type)
123 call this%layer%backward(previous%output, gradient)
124 type is(dropblock2d_layer_type)
125 call this%layer%backward(previous%output, gradient)
126 type is(dropblock3d_layer_type)
127 call this%layer%backward(previous%output, gradient)
128
129 type is(avgpool1d_layer_type)
130 call this%layer%backward(previous%output, gradient)
131 type is(avgpool2d_layer_type)
132 call this%layer%backward(previous%output, gradient)
133 type is(avgpool3d_layer_type)
134 call this%layer%backward(previous%output, gradient)
135 type is(maxpool1d_layer_type)
136 call this%layer%backward(previous%output, gradient)
137 type is(maxpool2d_layer_type)
138 call this%layer%backward(previous%output, gradient)
139 type is(maxpool3d_layer_type)
140 call this%layer%backward(previous%output, gradient)
141
142 class is(flatten_layer_type)
143 call this%layer%backward(previous%output, gradient)
144
145 type is(full_layer_type)
146
8/16
✗ Branch 0 not taken.
✓ Branch 1 taken 500 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 500 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 500 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 500 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 500 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 500 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 500 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 500 times.
500 call this%layer%backward(previous%output, gradient)
147 end select
148
149 1012 end subroutine backward
150
151
152 #if defined(GFORTRAN)
153 subroutine container_reduction(this, rhs)
154 implicit none
155 class(container_layer_type), intent(inout) :: this
156 class(container_layer_type), intent(in) :: rhs
157
158 select type(layer_this => this%layer)
159 class is(learnable_layer_type)
160 select type(layer_rhs => rhs%layer)
161 class is(learnable_layer_type)
162 call layer_this%reduce(layer_rhs)
163 end select
164 end select
165
166 end subroutine container_reduction
167 #endif
168
169
170
50/84
✓ Branch 0 taken 517 times.
✓ Branch 1 taken 509 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 509 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 507 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 505 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 505 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 505 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 505 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 505 times.
✓ Branch 16 taken 2 times.
✓ Branch 17 taken 503 times.
✓ Branch 18 taken 2 times.
✓ Branch 19 taken 501 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 501 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 501 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 501 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 501 times.
✗ Branch 28 not taken.
✓ Branch 29 taken 501 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 501 times.
✗ Branch 32 not taken.
✓ Branch 33 taken 501 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 501 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 501 times.
✓ Branch 38 taken 501 times.
✗ Branch 39 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 508 times.
✓ Branch 44 taken 504 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 504 times.
✓ Branch 47 taken 1 times.
✓ Branch 48 taken 503 times.
✓ Branch 49 taken 1 times.
✓ Branch 50 taken 502 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 502 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 502 times.
✗ Branch 55 not taken.
✓ Branch 56 taken 502 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 502 times.
✓ Branch 59 taken 1 times.
✓ Branch 60 taken 501 times.
✓ Branch 61 taken 1 times.
✓ Branch 62 taken 500 times.
✗ Branch 63 not taken.
✓ Branch 64 taken 500 times.
✗ Branch 65 not taken.
✓ Branch 66 taken 500 times.
✗ Branch 67 not taken.
✓ Branch 68 taken 500 times.
✗ Branch 69 not taken.
✓ Branch 70 taken 500 times.
✗ Branch 71 not taken.
✓ Branch 72 taken 500 times.
✗ Branch 73 not taken.
✓ Branch 74 taken 500 times.
✗ Branch 75 not taken.
✓ Branch 76 taken 500 times.
✗ Branch 77 not taken.
✓ Branch 78 taken 500 times.
✗ Branch 79 not taken.
✓ Branch 80 taken 500 times.
✓ Branch 81 taken 500 times.
✗ Branch 82 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
2038 end submodule container_layer_submodule
171 !!!#############################################################################
172