Data-driven learning of dynamical system in the SUBNET structure and ANNs
Project description
deepSI
deepSI provides a lightweight pytorch based framework for data-driven learning of dynamical systems (i.e. system identification). It contains a large forcus on the SUBNET method which is able to robustly model many systems.
⚠️ deepSI has been refractored without backward compatibility (5 December 2024) ⚠️
If you need to install the legacy version you can do this with
pip install git+https://github.com/GerbenBeintema/deepSI@legacy
and using the legacy documentation provided in https://github.com/GerbenBeintema/deepSI/tree/legacy.
Example usage
# Imports
import numpy as np
import deepSI as dsi
# Generate or load data
np.random.seed(0)
ulist = np.random.randn(10_000) # Input sequence
x = [0, 0] # Initial state
ylist = [] # Output sequence
for uk in ulist:
ylist.append(x[1]*x[0]*0.1 + x[0] + np.random.randn()*1e-3) # Compute output
x = x[0]/(1.2+x[1]**2) + x[1]*0.4, \
x[1]/(1.2+x[0]**2) + x[0]*0.4 + uk*(1+x[0]**2/10) # Advance state
# Put the input and output sequence in the Input_output_data format
data = dsi.Input_output_data(u=ulist, y=np.array(ylist))
# Split dataset
train, val, test = data[:8000], data[8000:9000], data[9000:]
# Create model
nu, ny, norm = dsi.get_nu_ny_and_auto_norm(data) # Characterize data
model = dsi.SUBNET(nu, ny, norm, nx=2, nb=20, na=20) # Creates encoder, f and h as MLP
# Train model on data using Adam
train_dict = dsi.fit(model, train, val, n_its=10_000, T=20, batch_size=256, val_freq=100)
# Simulate model on the test input sequence (using the encoder to initialize the state)
test_p = model.simulate(test)
# Visualize simulation of the model
from matplotlib import pyplot as plt
plt.figure(figsize=(7,3))
plt.plot(test.y, label='Real Data')
plt.plot(test_p.y, label=f'Model Sim. (NRMS = {((test.y-test_p.y)**2).mean()**0.5/test.y.std():.2%})', linestyle='--')
plt.title('Comparison of Real Data and Model Simulation', fontsize=14, fontweight='bold')
plt.legend(); plt.xlabel('Time Index'); plt.ylabel('y'); plt.grid(); plt.tight_layout(pad=0.5)
plt.show()
Installation
pip install deepSI
Features
- A number of popular SUBNET model structures
- SUBNET encoder structue (
deepSI.models.SUBNET). Featuring in: [1], [2], [3], [4], [5] - Continuous time SUBNET encoder structure (
deepSI.models.SUBNET_CT). Featuring in: [1], [2], [3] - Base class for fully custom SUBNET structures with shared parameters between
f,horencoder. (deepSI.models.Custom_SUBNET) as used in: - CNN SUBNET (
CNN_SUBNET). Featuring in: [1] Chapter 4, [2] - LPV SUBNET (
SUBNET_LPVandSUBNET_LPV_ext_scheduled). Featuring in: [1] - port HNN SUBNET (
pHNN_SUBNET). Featuring in: [1] - Koopman SUBNET (
Koopman_SUBNET). Featuring in: [1]
- SUBNET encoder structue (
- Connection to
nonlinear_benchmarksto easily load and evaluate on benchmarks. - Low amount of code such that it can be easily forked and edited to add missing features.
Futher documentation
Check out examples/1. Overview deepSI.ipynb.
Contributing
deepSI is in ongoing development and anyone can contribute to any part of module.
todo list and known issues
- Expand demonstration notebook with pHNN examples
- Issue where discrete time is printed in Input_output_data with torch.Tensors, and np.arrays sample time.
- General documentation
- known issue: CT SUBNET and DT SUBNET does not produce the correct initial when the sampling time is altered. (the encoder assumes that the sampling time does not change)
- pypi data upload such that it can be easily installed with
pip install deepSI - Improve speed with copy if enough memory is available. Also pre-transfer to GPU and maybe asyncroness getting of arrays.
- Known issue: Using the compile function in
fitwill sometimes result in a memory leak
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file deepsi-0.4.2.tar.gz.
File metadata
- Download URL: deepsi-0.4.2.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fa7d9d7ed989661fea477c0967ae822e97ddbbdb572cef4876658a7c0617cec
|
|
| MD5 |
940e45611578e5e220305758e9b6df64
|
|
| BLAKE2b-256 |
96d215a9429bca6c56d8fc6bef501c26485986346e811413c33513c0db962619
|
File details
Details for the file deepsi-0.4.2-py3-none-any.whl.
File metadata
- Download URL: deepsi-0.4.2-py3-none-any.whl
- Upload date:
- Size: 21.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b8f8a464ead1e06d201e5066dd5a26d2a448e7f64d83ea968b8d84000dff3ea
|
|
| MD5 |
f1095adbf021e4dd7c2197746f35691b
|
|
| BLAKE2b-256 |
ae96838c6dd1be46855573e4952b86e9f0ba7b6f3622dc87e04e9be481f5ce24
|