How to implement Moving window with LSTM for Time Series Prediction?

I am trying to implement a moving window in my dataset. The window size=14 (for instance).After implemntinf sliding window how to prepare inputs and outputs for netwok?

    clc
clear
data = chickenpox_dataset;
data2 = [data{:}];

figure
plot(data2)
xlabel("Month")
ylabel("Cases")
title("Monthy Cases of Chickenpox")
%%
% Partition the training and test data. Train on the first 90% of the sequence
% and test on the last 10%.

numTimeStepsTrain = floor(0.9*numel(data));

dataTrain = data(1:numTimeStepsTrain+1);
dataTest = data(numTimeStepsTrain+1:end);
%% Standardize Data

mu = mean(dataTrain);
sig = std(dataTrain);

dataTrainStandardized = (dataTrain - mu) / sig;
%% Prepare Predictors and Responses
% To forecast the values of future time steps of a sequence, specify the responses
% to be the training sequences with values shifted by one time step. That is,
% at each time step of the input sequence, the LSTM network learns to predict
% the value of the next time step. The predictors are the training sequences without
% the final time step.

XTrain = dataTrainStandardized(1:end-1);
YTrain = dataTrainStandardized(2:end);
%% *Define LSTM Network Architecture*
% Create an LSTM regression network. Specify the LSTM layer to have 200 hidden
% units.

numFeatures = 1;
numResponses = 1;
numHiddenUnits = 200;

layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
%%

options = trainingOptions('adam', ...
'MaxEpochs',250, ...
'InitialLearnRate',0.005, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...
'LearnRateDropFactor',0.2, ...
'Verbose',0, ...
'Plots','training-progress');
%% Train LSTM Network
% Train the LSTM network with the specified training options by using |trainNetwork|.

net = trainNetwork(XTrain,YTrain,layers,options);
%% Forecast Future Time Steps
% To forecast the values of multiple time steps in the future, use the |predictAndUpdateState|
% function to predict time steps one at a time and update the network state at
% each prediction. For each prediction, use the previous prediction as input to
% the function.
%
% Standardize the test data using the same parameters as the training data.

dataTestStandardized = (dataTest - mu) / sig;
XTest = dataTestStandardized(1:end-1);
%%
% To initialize the network state, first predict on the training data |XTrain|.
% Next, make the first prediction using the last time step of the training response
% |YTrain(end)|. Loop over the remaining predictions and input the previous prediction

numTimeStepsTest = numel(XTest);
for i = 2:numTimeStepsTest
end
%%
% Unstandardize the predictions using the parameters calculated earlier.

YPred = sig*YPred + mu;
%%
% The training progress plot reports the root-mean-square error (RMSE) calculated
% from the standardized data. Calculate the RMSE from the unstandardized predictions.

YTest = dataTest(2:end);
rmse = sqrt(mean((YPred-YTest).^2))
%%
% Plot the training time series with the forecasted values.

figure
plot(dataTrain(1:end-1))
hold on
idx = numTimeStepsTrain:(numTimeStepsTrain+numTimeStepsTest);
plot(idx,[data(numTimeStepsTrain) YPred],'.-')
hold off
xlabel("Month")
ylabel("Cases")
title("Forecast")
legend(["Observed" "Forecast"])
%%
% Compare the forecasted values with the test data.

figure
subplot(2,1,1)
plot(YTest)
hold on
plot(YPred,'.-')
hold off
legend(["Observed" "Forecast"])
ylabel("Cases")
title("Forecast")

subplot(2,1,2)
stem(YPred - YTest)
xlabel("Month")
ylabel("Error")
title("RMSE = " + rmse)
%% Update Network State with Observed Values
% If you have access to the actual values of time steps between predictions,
% then you can update the network state with the observed values instead of the
% predicted values.
%
% First, initialize the network state. To make predictions on a new sequence,
% reset the network state using |resetState|. Resetting the network state prevents
% previous predictions from affecting the predictions on the new data. Reset the
% network state, and then initialize the network state by predicting on the training
% data.

net = resetState(net);
%%
% Predict on each time step. For each prediction, predict the next time
% step using the observed value of the previous time step. Set the |'ExecutionEnvironment'|
% option of |predictAndUpdateState| to |'cpu'|.

YPred = [];
numTimeStepsTest = numel(XTest);
for i = 1:numTimeStepsTest
end
%%
% Unstandardize the predictions using the parameters calculated earlier.

YPred = sig*YPred + mu;
%%
% Calculate the root-mean-square error (RMSE).

rmse = sqrt(mean((YPred-YTest).^2))
%%
% Compare the forecasted values with the test data.

figure
subplot(2,1,1)
plot(YTest)
hold on
plot(YPred,'.-')
hold off
legend(["Observed" "Predicted"])
ylabel("Cases")