# how to construct a batch for multiple trajectories in neural network

6 views (last 30 days)
Commented: Muhammad on 7 Feb 2024
If we have more than one trajectory and want to construct a batch for all these trajectories what will be the possible way to use all the trajectroies for the batch in neural network?
e.g this will work for multiple trajectories?
function [x0, targets] = createMiniBatch(numTimesteps,numTimesPerObs,miniBatchSize,X)
% e.g: numTimesteps=20;numTimesPerObs=5; miniBatchSize=10;
% Create batches of trajectories.
s = randperm(numTimesteps - numTimesPerObs, miniBatchSize);
x0 = dlarray(X(:, s));
targets = zeros([size(X,1) miniBatchSize numTimesPerObs]);
for i = 1:miniBatchSize
targets(:, i, 1:numTimesPerObs) = X(:, s(i) + 1:(s(i) + numTimesPerObs));
end
end
or there is another way for batch for multiple trajectroies

Shubham on 6 Feb 2024
The function you provided seems to be designed for creating mini-batches from a single long trajectory X, where X is a matrix with each column representing a timestep. The function selects random starting points s and creates input sequences x0 and target sequences targets for training a neural network.
However, if you have multiple trajectories and you want to create mini-batches that include samples from all these trajectories, you need to modify the function to handle a cell array of trajectories or a 3D array where each slice along the third dimension represents a different trajectory.
function [x0, targets] = createMiniBatch(numTimesteps, numTimesPerObs, miniBatchSize, trajectories)
% e.g: numTimesteps=20; numTimesPerObs=5; miniBatchSize=10;
% trajectories is a cell array where each cell contains a matrix for a trajectory
% Calculate the total number of trajectories
numTrajectories = numel(trajectories);
% Preallocate arrays for inputs and targets
inputSize = size(trajectories{1}, 1); % Assuming all trajectories have the same number of features
x0 = dlarray(zeros(inputSize, miniBatchSize));
targets = zeros(inputSize, miniBatchSize, numTimesPerObs);
for i = 1:miniBatchSize
% Randomly select a trajectory
trajIndex = randi(numTrajectories);
% Randomly select a starting point within the trajectory
maxStartIndex = size(trajectories{trajIndex}, 2) - numTimesPerObs;
startIndex = randi(maxStartIndex);
% Extract the sequence of data for the current mini-batch
x0(:, i) = dlarray(trajectories{trajIndex}(:, startIndex));
targets(:, i, :) = trajectories{trajIndex}(:, startIndex+1:startIndex+numTimesPerObs);
end
end
In this modified function:
• trajectories is a cell array where each cell contains a matrix for a trajectory.
• The function randomly selects a trajectory and then randomly selects a starting point within that trajectory for each sample in the mini-batch.
This approach allows you to create mini-batches that contain sequences from different trajectories, which can be beneficial for training neural networks on more varied data.
Remember to ensure that all trajectories have enough timesteps (size(trajectories{trajIndex}, 2) > numTimesPerObs) to avoid indexing errors. If your trajectories have different numbers of features or timesteps, you may need to further modify the function to accommodate these differences.
Thank you