dynoNet: A neural network architecture for learning dynamical systems
This repository contains the Python code to reproduce the results of the paper dynoNet: A neural network architecture for learning dynamical systems by Marco Forgione and Dario Piga.
In this work, we introduce the linear dynamical operator as a differentiable layer compatible with back-propagation-based training. The operator is parametrized as a rational transfer function and thus can represent an infinite impulse response (IIR) filtering operation, as opposed to the Convolutional layer of 1D-CNNs that is equivalent to finite impulse response (FIR) filtering.
In the dynoNet architecture, linear dynamical operators are combined with static (i.e., memoryless) non-linearities which can be either elementary activation functions applied channel-wise; fully connected feed-forward neural networks; or other differentiable operators.
A 15-min presentation about dynoNet is available here.
Folders:
- dynonet: PyTorch implementation of the linear dynamical operator (aka G-block in the paper) used in dynoNet
- examples: examples using dynoNet for system identification
- util: definition of metrics R-square, RMSE, fit index
- doc: paper & slides
Three examples discussed in the paper are:
- WH2009: A circuit with Wiener-Hammerstein behavior. Experimental dataset from http://www.nonlinearbenchmark.org
- BW: Bouc-Wen. A nonlinear dynamical system describing hysteretic effects in mechanical engineering. Experimental dataset from http://www.nonlinearbenchmark.org
- EMPS: A controlled prismatic joint (Electro Mechanical Positioning System). Experimental dataset from http://www.nonlinearbenchmark.org
For the WH2009 example, the main scripts are:
WH2009_train.py: Training of the dynoNet modelWH2009_test.py: Evaluation of the dynoNet model on the test dataset, computation of metrics.
Similar scripts are provided for the other examples.
NOTE: the original data sets are not included in this project. They have to be manually downloaded from http://www.nonlinearbenchmark.org and copied in the data sub-folder of the example.
Software requirements:
Simulations were performed on a Python 3.7 conda environment with
- numpy
- scipy
- matplotlib
- pandas
- pytorch (version 1.4)
These dependencies may be installed through the commands:
conda install numpy scipy pandas matplotlib
conda install pytorch torchvision cudatoolkit=10.2 -c pytorch
Local installation:
From PyPI
Type in terminal:
pip install dynonet
This will install the latest stable version packaged on PyPI: https://pypi.org/project/dynonet/
From a local copy of this repository
Navigate to a local copy of this repository, where setup.py and setup.cfg are located. Then, type in terminal:
pip install -e .
Citing
If you find this project useful, we encourage you to
- Star this repository :star:
- Cite the paper
@article{forgione2021dyno,
title={\textit{dyno{N}et}: A neural network architecture for learning dynamical systems},
author={Forgione, M. and Piga, D.},
journal={International Journal of Adaptive Control and Signal Processing},
volume={35},
number={4},
pages={612--626},
year={2021},
publisher={Wiley}
}
Metadata
Release files for dynonet 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dynonet-0.1.2.tar.gz | 13.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dynonet-0.1.2-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 27.2 kB
Release files / dynonet-0.1.2.tar.gz
| Download URL | dynonet-0.1.2.tar.gz |
|---|---|
| Size | 13.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9ccb5c5a8bb00c996c3496a441a738708f4a78e661c77d8634e15bda58340da1
|
|
BLAKE2b-256 checksum How to use checksums |
b528088e03ca892f76fec17a9f5b24aa869eff80989f66bee43a82940578f462
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.0 CPython/3.11.9
|
Release files / dynonet-0.1.2-py2.py3-none-any.whl
| Download URL | dynonet-0.1.2-py2.py3-none-any.whl |
|---|---|
| Size | 13.5 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
2f84c23ede4cb3a122a8e2e5638918f0cd2a1460b0d8a6572f51bb2db7156040
|
|
BLAKE2b-256 checksum How to use checksums |
97e9f1ac9b2a7ea5418b033b3641572a09bbe6c1e56a629f5b3d5df3984ad0b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.0 CPython/3.11.9
|