7
7
use nf_io_hdf5, only: get_hdf5_dataset
8
8
use nf_keras, only: get_keras_h5_layers, keras_layer
9
9
use nf_layer, only: layer
10
- use nf_layer_constructors, only: dense, input
10
+ use nf_layer_constructors, only: conv2d, dense, flatten, input, maxpool2d
11
11
use nf_loss, only: quadratic_derivative
12
12
use nf_optimizers, only: sgd
13
13
use nf_parallel, only: tile_indices
@@ -68,6 +68,27 @@ module function network_from_keras(filename) result(res)
68
68
69
69
select case (keras_layers(n) % class)
70
70
71
+ case (' Conv2D' )
72
+
73
+ if (keras_layers(n) % kernel_size(1 ) &
74
+ /= keras_layers(n) % kernel_size(2 )) &
75
+ error stop ' Non-square kernel in conv2d layer not supported.'
76
+
77
+ layers(n) = conv2d( &
78
+ keras_layers(n) % filters, &
79
+ ! FIXME add support for non-square kernel
80
+ keras_layers(n) % kernel_size(1 ) &
81
+ )
82
+
83
+ case (' Dense' )
84
+ layers(n) = dense( &
85
+ keras_layers(n) % units(1 ), &
86
+ keras_layers(n) % activation &
87
+ )
88
+
89
+ case (' Flatten' )
90
+ layers(n) = flatten()
91
+
71
92
case (' InputLayer' )
72
93
if (size (keras_layers(n) % units) == 1 ) then
73
94
! input1d
@@ -77,10 +98,20 @@ module function network_from_keras(filename) result(res)
77
98
layers(n) = input(keras_layers(n) % units)
78
99
end if
79
100
80
- case (' Dense' )
81
- layers(n) = dense( &
82
- keras_layers(n) % units(1 ), &
83
- keras_layers(n) % activation &
101
+ case (' MaxPooling2D' )
102
+
103
+ if (keras_layers(n) % pool_size(1 ) &
104
+ /= keras_layers(n) % pool_size(2 )) &
105
+ error stop ' Non-square pool in maxpool2d layer not supported.'
106
+
107
+ if (keras_layers(n) % strides(1 ) &
108
+ /= keras_layers(n) % strides(2 )) &
109
+ error stop ' Unequal strides in maxpool2d layer are not supported.'
110
+
111
+ layers(n) = maxpool2d( &
112
+ ! FIXME add support for non-square pool and stride
113
+ keras_layers(n) % pool_size(1 ), &
114
+ keras_layers(n) % strides(1 ) &
84
115
)
85
116
86
117
case default
0 commit comments