我现在有一个顺序神经网络,用于预测机器人状态。但是当我在 Casadi 中实现神经网络来解决 MPC 问题时遇到了问题。该错误不断警告我,我无法在需要卷积过程的顺序神经网络中使用 Casadi MX 变量。
我看过 repo l4casadi 但它似乎只支持 nn.linear 而不是 nn.conv1d。希望在这里找到解决方案并感谢您的回答。
L4CasADi 支持超过线性层(例如卷积)的 PyTorch 模型。 L4CasADi 支持所有 PyTorch 模型,这些模型是 jit 可追踪/可编写脚本的。
L4CasADi 卷积示例:
import torch
import numpy as np
import l4casadi as l4c
import casadi as cs
# Create a model with convolutional layers
class ConvModel(torch.nn.Module):
def __init__(self):
super().__init__()
self.conv1 = torch.nn.Conv2d(1, 32, 3, padding=1)
self.conv2 = torch.nn.Conv2d(32, 64, 3, padding=1)
self.conv3 = torch.nn.Conv2d(64, 64, 3, padding=1)
self.fc1 = torch.nn.Linear(64 * 7 * 7, 128)
self.fc2 = torch.nn.Linear(128, 1)
def forward(self, x):
x = x.reshape(-1, 1, 7, 7)
x = torch.nn.functional.relu(self.conv1(x))
x = torch.nn.functional.relu(self.conv2(x))
x = torch.nn.functional.relu(self.conv3(x))
x = x.view(-1, 64 * 7 * 7)
x = torch.nn.functional.relu(self.fc1(x))
x = self.fc2(x)
return x
x = np.random.randn(49).astype(np.float32)
model = ConvModel()
y = model(torch.tensor(x)[None])
print(f'Torch output: {y}')
l4c_model = l4c.L4CasADi(model, model_expects_batch_dim=True)
x_sym = cs.MX.sym('x', 49)
y_sym = l4c_model(x_sym)
f = cs.Function('y', [x_sym], [y_sym])
y = f(x)
print(f'L4CasADi Output: {y}')