@Override
public void preProcess(MultiDataSet multiDataSet) {
double alm = beta.nextDouble();
INDArray[] features = multiDataSet.getFeatures();
INDArray[] labels = multiDataSet.getLabels();
INDArray[] featureMasks = multiDataSet.getFeaturesMaskArrays();
INDArray[] labelMasks = multiDataSet.getLabelsMaskArrays();
int minibatchSize = features[0].size(0);
INDArray[] tmpBuffer = new INDArray[minibatchSize];
int randomIndex1[] = new int[minibatchSize];
int randomIndex2[] = new int[minibatchSize];
for (int exampleIndex = 0; exampleIndex < minibatchSize; exampleIndex++) {
tmpBuffer[exampleIndex] = null;
randomIndex1[exampleIndex] = random.nextInt(minibatchSize);
randomIndex2[exampleIndex] = random.nextInt(minibatchSize);
}
for (INDArray feature : features) shuffle(minibatchSize, alm, feature, randomIndex1, randomIndex2);
for (INDArray label : labels) shuffle(minibatchSize, alm, label, randomIndex1, randomIndex2);
if (featureMasks != null) for (INDArray featureMask : featureMasks)
keepLongestMask(minibatchSize, featureMask, randomIndex1, randomIndex2);
if (labelMasks != null) for (INDArray labelMask : labelMasks)
keepLongestMask(minibatchSize, labelMask, randomIndex1, randomIndex2);
}