csnn is a package for creating symbolic neural networks in CasADi in a PyTorch-like API style.
The package allows the creation of neural networks with the symbolic language offered by CasADi. This is done in a similar way to PyTorch. For example, the following code allows us to create an MLP with a hidden layer:
import casadi as cs
from csnn import set_sym_type, Linear, Sequential, ReLU
set_sym_type("SX") # can set either MX or SX
net = Sequential[cs.SX]((
Linear(4, 32),
ReLU(),
Linear(32, 1),
ReLU()
))
batch = 2
input = cs.SX.sym("in", batch, 4)
output = net(input)
assert output.shape == (batch, 1)
So far, the following modules that are available in PyTorch have been implemented:
- Containers
- Module
- Sequential
- Activation functions
- GELU
- SELU
- LeakyReLU
- ReLU
- Sigmoid
- Softplus
- Tanh
- Linear layers
- Linear
- Recurrent layers
- RNNCell
- RNN
- Dropout layers
- Dropout
- Dropout1d
Additionally, the library provides the implementation for the following convex neural networks (see csnn.convex
):
- FicNN
- PwqNN
- PsdNN
To install the package, run
pip install csnn
csnn has the following dependencies
For playing around with the source code instead, run
git clone https://github.com/FilippoAiraldi/casadi-neural-nets.git
The repository is provided under the MIT License. See the LICENSE file included with this repository.
Filippo Airaldi, PhD Candidate [f.airaldi@tudelft.nl | filippoairaldi@gmail.com]
Delft Center for Systems and Control in Delft University of Technology
Copyright (c) 2023 Filippo Airaldi.
Copyright notice: Technische Universiteit Delft hereby disclaims all copyright interest in the program “csnn” (Nueral Networks with CasADi) written by the Author(s). Prof. Dr. Ir. Fred van Keulen, Dean of 3mE.