NeuralSDE.reference.ipynb#

[1]:
# %load_ext nb_black
# pip install neural-diffeqs

import neural_diffeqs

print(f"Version: {neural_diffeqs.__version__}")
import torch
Version: 0.3.2

Default NeuralSDE#

The only required parameter is:

  • state_size

[9]:
SDE = neural_diffeqs.NeuralSDE(state_size=50)
print(SDE)
NeuralSDE(
  (mu): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=2000, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): LeakyReLU(negative_slope=0.01)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=2000, out_features=2000, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): LeakyReLU(negative_slope=0.01)
    )
    (output): Sequential(
      (linear): Linear(in_features=2000, out_features=50, bias=True)
    )
  )
  (sigma): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=400, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): LeakyReLU(negative_slope=0.01)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=400, out_features=400, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): LeakyReLU(negative_slope=0.01)
    )
    (output): Sequential(
      (linear): Linear(in_features=400, out_features=50, bias=True)
    )
  )
)

Changing some parameters#

For example, specify the hidden state size for each network

[13]:
SDE = neural_diffeqs.NeuralSDE(
    state_size=50, mu_hidden=[512, 512], sigma_hidden=[32, 32]
)
print(SDE)
NeuralSDE(
  (mu): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=512, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): LeakyReLU(negative_slope=0.01)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=512, out_features=512, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): LeakyReLU(negative_slope=0.01)
    )
    (output): Sequential(
      (linear): Linear(in_features=512, out_features=50, bias=True)
    )
  )
  (sigma): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=32, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): LeakyReLU(negative_slope=0.01)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=32, out_features=32, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): LeakyReLU(negative_slope=0.01)
    )
    (output): Sequential(
      (linear): Linear(in_features=32, out_features=50, bias=True)
    )
  )
)

Activation functions, dropout, and bias#

[14]:
import torch
[19]:
SDE = neural_diffeqs.NeuralSDE(
    state_size=50,
    mu_hidden=[512, 512],
    sigma_hidden=[32, 32],
    mu_activation=[torch.nn.Softmax, torch.nn.Tanh],
    sigma_activation=["Softmax", "Tanh"],
    mu_dropout=0,
    sigma_dropout=0,
)
print(SDE)
NeuralSDE(
  (mu): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=512, bias=True)
      (activation): Softmax(dim=None)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=512, out_features=512, bias=True)
      (activation): Tanh()
    )
    (output): Sequential(
      (linear): Linear(in_features=512, out_features=50, bias=True)
    )
  )
  (sigma): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=32, bias=True)
      (activation): Softmax(dim=None)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=32, out_features=32, bias=True)
      (activation): Tanh()
    )
    (output): Sequential(
      (linear): Linear(in_features=32, out_features=50, bias=True)
    )
  )
)
[21]:
SDE = neural_diffeqs.NeuralSDE(
    state_size=50,
    mu_hidden=[512, 512],
    sigma_hidden=[32, 32],
    mu_activation=torch.nn.Softmax,
    sigma_activation=["Softmax", "Softmax"],
    mu_dropout=0,
    sigma_dropout=0,
)
print(SDE)
NeuralSDE(
  (mu): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=512, bias=True)
      (activation): Softmax(dim=None)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=512, out_features=512, bias=True)
      (activation): Softmax(dim=None)
    )
    (output): Sequential(
      (linear): Linear(in_features=512, out_features=50, bias=True)
    )
  )
  (sigma): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=32, bias=True)
      (activation): Softmax(dim=None)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=32, out_features=32, bias=True)
      (activation): Softmax(dim=None)
    )
    (output): Sequential(
      (linear): Linear(in_features=32, out_features=50, bias=True)
    )
  )
)
[23]:
SDE = neural_diffeqs.NeuralSDE(
    state_size=50,
    mu_hidden=[512, 512],
    sigma_hidden=[32, 32],
    mu_activation=torch.nn.Softmax,
    sigma_activation=["Softmax", "Softmax"],
    mu_dropout=[0.2, 0.1],
    sigma_dropout=0.2,
)
print(SDE)
NeuralSDE(
  (mu): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=512, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): Softmax(dim=None)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=512, out_features=512, bias=True)
      (dropout): Dropout(p=0.1, inplace=False)
      (activation): Softmax(dim=None)
    )
    (output): Sequential(
      (linear): Linear(in_features=512, out_features=50, bias=True)
    )
  )
  (sigma): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=32, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): Softmax(dim=None)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=32, out_features=32, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): Softmax(dim=None)
    )
    (output): Sequential(
      (linear): Linear(in_features=32, out_features=50, bias=True)
    )
  )
)
[25]:
SDE = neural_diffeqs.NeuralSDE(
    state_size=50,
    mu_hidden=[512, 512],
    sigma_hidden=[32, 32],
    mu_activation=torch.nn.Softmax,
    sigma_activation=["Softmax", "Softmax"],
    mu_dropout=[0.2, 0.1],
    sigma_dropout=0.2,
    mu_bias=[False, True],
)
print(SDE)
NeuralSDE(
  (mu): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=512, bias=False)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): Softmax(dim=None)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=512, out_features=512, bias=True)
      (dropout): Dropout(p=0.1, inplace=False)
      (activation): Softmax(dim=None)
    )
    (output): Sequential(
      (linear): Linear(in_features=512, out_features=50, bias=True)
    )
  )
  (sigma): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=32, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): Softmax(dim=None)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=32, out_features=32, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): Softmax(dim=None)
    )
    (output): Sequential(
      (linear): Linear(in_features=32, out_features=50, bias=True)
    )
  )
)
[27]:
SDE = neural_diffeqs.NeuralSDE(
    state_size=50,
    mu_hidden=[512, 512],
    sigma_hidden=[32, 32],
    mu_activation=torch.nn.Softmax,
    sigma_activation=["Softmax", "Softmax"],
    mu_dropout=[0.2, 0.1],
    sigma_dropout=0.2,
    mu_output_bias=False,
    sigma_output_bias=False,
)
print(SDE)
NeuralSDE(
  (mu): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=512, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): Softmax(dim=None)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=512, out_features=512, bias=True)
      (dropout): Dropout(p=0.1, inplace=False)
      (activation): Softmax(dim=None)
    )
    (output): Sequential(
      (linear): Linear(in_features=512, out_features=50, bias=False)
    )
  )
  (sigma): TorchNet(
    (hidden_1): Sequential(
      (linear): Linear(in_features=50, out_features=32, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): Softmax(dim=None)
    )
    (hidden_2): Sequential(
      (linear): Linear(in_features=32, out_features=32, bias=True)
      (dropout): Dropout(p=0.2, inplace=False)
      (activation): Softmax(dim=None)
    )
    (output): Sequential(
      (linear): Linear(in_features=32, out_features=50, bias=False)
    )
  )
)