Hi all, apologies in advacne it is my first post. i am trying an experiment with new data and i getting an error i was wondering if somebody could please assist.
import math

import cvxpy as cp
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import torch
from cvxpylayers.torch import CvxpyLayer

import latexify
latexify.latexify()

torch.set_default_tensor_type(torch.DoubleTensor)
%matplotlib inline


N_train=1000




test=yf.download("SPY", start="2012-01-01", end="2017-04-30")['Close'].to_numpy()
outputs=torch.from_numpy(test)
inputs=np.linspace(1,100,len(outputs))
inputs=torch.from_numpy(inputs)

X_train = inputs[:N_train]
Y_train = outputs[:N_train]

X_val = inputs[N_train:]
Y_val = outputs[N_train:]


len(X_val)
len(Y_val)

def create_layer():
   y_cp = cp.Variable(n)
   x_minus_y = cp.Variable(n)
   
   x_param = cp.Parameter(n)
   theta_param = cp.Parameter((n, n))
   lambda_param = cp.Parameter(pos=True)
   objective = (
       cp.sum_squares(theta_param @ x_minus_y) +
       lambda_param*cp.sum_squares(cp.diff(y_cp))
   )
   constraints = [
       x_minus_y == x_param - y_cp
   ]
   problem = cp.Problem(cp.Minimize(objective), constraints)
   layer = CvxpyLayer(
       problem,
       parameters=[x_param, theta_param, lambda_param],
       variables=[y_cp])
   return layer
   

layer = create_layer()

import torch
from torch.utils.data import TensorDataset, DataLoader
import numpy as np
from cvxpylayers.torch import CvxpyLayer

torch.set_default_dtype(torch.double)

from tqdm.notebook import tqdm


def fit(loss, params, X, Y, Xval, Yval, batch_size=128, lr=1e-3, epochs=100, verbose=False, print_every=1, callback=None):
   """

   Arguments:
       loss: given x and y in batched form, evaluates loss.
       params: list of parameters to optimize.
       X: input data, torch tensor.
       Y: output data, torch tensor.
       Xval: input validation data, torch tensor.
       Yval: output validation data, torch tensor.
   """

   train_dset = TensorDataset(X, Y)
   train_loader = DataLoader(train_dset, batch_size=batch_size, shuffle=True)
   opt = torch.optim.Adam(params, lr=lr)

   train_losses = []
   val_losses = []
   for epoch in tqdm(range(epochs)):
       if callback is not None:
           callback()
           
       with torch.no_grad():
           val_losses.append(loss(Xval, Yval).item())
       if verbose and epoch % print_every == 0:
           print("val loss %03d | %3.5f" % (epoch + 1, val_losses[-1]))

       batch = 1
       train_losses.append([])
       for Xbatch, Ybatch in train_loader:
           opt.zero_grad()
           l = loss(Xbatch, Ybatch)
           l.backward()
           opt.step()
           train_losses[-1].append(l.item())
           if verbose and epoch % print_every == 0:
               print("batch %03d / %03d | %3.5f" %
                     (batch, len(train_loader), np.mean(train_losses[-1])))
           batch += 1
   return val_losses, train_losses

theta_tch = torch.eye(n, requires_grad=True)
lambda_tch = torch.tensor(0.5, requires_grad=True)
params = [theta_tch, lambda_tch]

def loss_fn(X, actual):
   preds = layer(X, theta_tch, lambda_tch)[0]
   mse_per_example = (preds - actual).pow(2).mean(axis=1)
   return mse_per_example.mean()


val_losses, train_losses =  fit(
   loss_fn, params, X_train, Y_train, X_val, Y_val, lr=1e-2, batch_size=8,
   epochs=15, verbose=True, print_every=1)

The above is the code taken from - https://github.com/cvxgrp/cvxpylayers/blob/master/examples/torch/signal_denoising.ipynb 1
and the error i am getting
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-58-0b0fb50d4406> in <module>
----> 1 val_losses, train_losses =  fit(
     2     loss_fn, params, X_train, Y_train, X_val, Y_val, lr=1e-2, batch_size=8,
     3     epochs=15, verbose=True, print_every=1)

<ipython-input-56-f19c59cb9b44> in fit(loss, params, X, Y, Xval, Yval, batch_size, lr, epochs, verbose, print_every, callback)
    32 
    33         with torch.no_grad():
---> 34             val_losses.append(loss(Xval, Yval).item())
    35         if verbose and epoch % print_every == 0:
    36             print("val loss %03d | %3.5f" % (epoch + 1, val_losses[-1]))

<ipython-input-57-0aead751c22d> in loss_fn(X, actual)
     4 
     5 def loss_fn(X, actual):
----> 6     preds = layer(X, theta_tch, lambda_tch)[0]
     7     mse_per_example = (preds - actual).pow(2).mean(axis=1)
     8     return mse_per_example.mean()

~/miniconda3/envs/myenv1/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
   720             result = self._slow_forward(*input, **kwargs)
   721         else:
--> 722             result = self.forward(*input, **kwargs)
   723         for hook in itertools.chain(
   724                 _global_forward_hooks.values(),

~/cvxpylayers/cvxpylayers/torch/cvxpylayer.py in forward(self, solver_args, *params)
   150             info=info,
   151         )
--> 152         sol = f(*params)
   153         self.info = info
   154         return sol

~/cvxpylayers/cvxpylayers/torch/cvxpylayer.py in forward(ctx, *params)
   224                 p_shape = p.shape if batch_size == 0 else p.shape[1:]
   225                 if not np.all(p_shape == param_order[i].shape):
--> 226                     raise ValueError(
   227                         "Inconsistent parameter shapes passed in. "
   228                         "Expected parameter {} to have non-batched shape of "

ValueError: Inconsistent parameter shapes passed in. Expected parameter 0 to have non-batched shape of (100,) but got torch.Size([339]).