The goal of the FNN library is to provide the fnn
module, which can be used
in Fortran code to implement simple, sequential neural networks. Once a
network is constructed, the forward operator is available with
apply_forward
and can be applied both in training and inference
mode. The tangent linear and adjoint operators are also available.
In addition, it is possible to access (both read
and write) the networks parameters as a real vector.
This module has been largely inspired by the FKB. It has been designed to provide the technical possibility to use neural networks within variational data assimilation using the Object-Oriented Prediction System (OOPS) developed at the European Centre for Medium-range Weather Forecast (ECMWF).
This repository is organised as follows.
- The source code is located in the
src/
folder. The.f90
files together implement thefnn
module. The python script is used to create text files (see Section Creating a network). - The test suite is located in the
test/
folder. - The module documentation can be found here.
The code is archived on zenodo. TODO: mention the JAMES paper once it is out.
The precision for both real and integer numbers is defined in fnn_common.f90
.
For compatibility with OOPS, these are hard-coded to real64 and int32.
Nevertheless, there is no obstacle to use this library with other kind of real
and integer numbers.
The easiest way to create a network with the fnn
module is to use the
snn_fromfile
function which can read well-formatted text files.
The keras_to_fnn.py
script can be used to transform a sequential
neural network implemented in Keras into a well-formatted text file.
The test suite consists of a set of python scripts testing various functionalities
of the module. The tests must be compiled (for example using scons
) before they
can be executed.
In the test suite, several examples can be found. Let us take the example
of test 3. The workflow of this test is handled by the python script test_3.py
.
- A sequential neural network is created using Keras.
- The network is converted to a text file using the
keras_to_fnn.py
script. - The fortran program
test_3.x
is executed. Note that this program has to be compiled fromtest_3.f90
beforehand, for example usingscons
.- The text file is read to construct the network.
- An ensemble of 100 random input vectors is drawn.
- The forward operator is applied to each of the 100 random inputs.
- The fortran input and outputs are written to a binary file.
- Back to the python script, the binary file is read, and the fortran output are compared to their expected value.