@agibsonccc
I may need to add some information. There are 2 use cases below, one row count is relatively small, and the slices are small number of failures; Another row count is relatively large, and most of the slices fail.
row count is relatively small:
INDArray data = Nd4j.rand(17379 / 3, 59);
int casualIndex = 56;
int cntIndex = 58;
INDArray features = data.get(NDArrayIndex.all(), NDArrayIndex.interval(0, casualIndex));
INDArray targets = data.get(NDArrayIndex.all(), NDArrayIndex.interval(casualIndex, cntIndex + 1));
int total_row = (int) data.shape()[0];
int val_size = total_row - 21 * 24;
int train_size = val_size - 60 * 24;
INDArray train_features = features.get(NDArrayIndex.interval(0, train_size), NDArrayIndex.all());
INDArray train_targets = targets.get(NDArrayIndex.interval(0, train_size), NDArrayIndex.all());
INDArray val_features = features.get(NDArrayIndex.interval(train_size, val_size), NDArrayIndex.all());
INDArray val_targets = targets.get(NDArrayIndex.interval(train_size, val_size), NDArrayIndex.all());
INDArray test_features = features.get(NDArrayIndex.interval(val_size, total_row), NDArrayIndex.all());
INDArray test_targets = targets.get(NDArrayIndex.interval(val_size, total_row), NDArrayIndex.all());
System.out.printf("train_features shape:%s\n", Arrays.toString(train_features.shape()));
System.out.printf("train_targets shape:%s\n", Arrays.toString(train_targets.shape()));
System.out.printf("val_features shape:%s\n", Arrays.toString(val_features.shape()));
System.out.printf("val_targets shape:%s\n", Arrays.toString(val_targets.shape()));
System.out.printf("test_features shape:%s\n", Arrays.toString(test_features.shape()));
System.out.printf("test_targets shape:%s\n", Arrays.toString(test_targets.shape()));
Run the results:
train_features shape:[3849, 56]
train_targets shape:[3849, 3]
val_features shape:[1440, 56]
val_targets shape:[ ]
test_features shape:[504, 56]
test_targets shape:[ ]
row count is relatively large:
INDArray data = Nd4j.rand(17379 * 3, 59);
int casualIndex = 56;
int cntIndex = 58;
INDArray features = data.get(NDArrayIndex.all(), NDArrayIndex.interval(0, casualIndex));
INDArray targets = data.get(NDArrayIndex.all(), NDArrayIndex.interval(casualIndex, cntIndex + 1));
int total_row = (int) data.shape()[0];
int val_size = total_row - 21 * 24;
int train_size = val_size - 60 * 24;
INDArray train_features = features.get(NDArrayIndex.interval(0, train_size), NDArrayIndex.all());
INDArray train_targets = targets.get(NDArrayIndex.interval(0, train_size), NDArrayIndex.all());
INDArray val_features = features.get(NDArrayIndex.interval(train_size, val_size), NDArrayIndex.all());
INDArray val_targets = targets.get(NDArrayIndex.interval(train_size, val_size), NDArrayIndex.all());
INDArray test_features = features.get(NDArrayIndex.interval(val_size, total_row), NDArrayIndex.all());
INDArray test_targets = targets.get(NDArrayIndex.interval(val_size, total_row), NDArrayIndex.all());
System.out.printf("train_features shape:%s\n", Arrays.toString(train_features.shape()));
System.out.printf("train_targets shape:%s\n", Arrays.toString(train_targets.shape()));
System.out.printf("val_features shape:%s\n", Arrays.toString(val_features.shape()));
System.out.printf("val_targets shape:%s\n", Arrays.toString(val_targets.shape()));
System.out.printf("test_features shape:%s\n", Arrays.toString(test_features.shape()));
System.out.printf("test_targets shape:%s\n", Arrays.toString(test_targets.shape()));
Run the results:
train_features shape:[50193, 56]
train_targets shape:[50193, 3]
val_features shape:[ ]
val_targets shape:[ ]
test_features shape:[ ]
test_targets shape:[ ]
If the slice is using raw data, it can succeed despite the increase in the number of rows in the data.
INDArray data = Nd4j.rand(17379 * 3, 59);
int casualIndex = 56;
int cntIndex = 58;
int total_row = (int) data.shape()[0];
int val_size = total_row - 21 * 24;
int train_size = val_size - 60 * 24;
INDArray train_features = data.get(NDArrayIndex.interval(0, train_size), NDArrayIndex.interval(0, casualIndex));
INDArray train_targets = data.get(NDArrayIndex.interval(0, train_size), NDArrayIndex.interval(casualIndex, cntIndex + 1));
INDArray val_features = data.get(NDArrayIndex.interval(train_size, val_size), NDArrayIndex.interval(0, casualIndex));
INDArray val_targets = data.get(NDArrayIndex.interval(train_size, val_size), NDArrayIndex.interval(casualIndex, cntIndex + 1));
INDArray test_features = data.get(NDArrayIndex.interval(val_size, total_row), NDArrayIndex.interval(0, casualIndex));
INDArray test_targets = data.get(NDArrayIndex.interval(val_size, total_row), NDArrayIndex.interval(casualIndex, cntIndex + 1));
System.out.printf("train_features shape:%s\n", Arrays.toString(train_features.shape()));
System.out.printf("train_targets shape:%s\n", Arrays.toString(train_targets.shape()));
System.out.printf("val_features shape:%s\n", Arrays.toString(val_features.shape()));
System.out.printf("val_targets shape:%s\n", Arrays.toString(val_targets.shape()));
System.out.printf("test_features shape:%s\n", Arrays.toString(test_features.shape()));
System.out.printf("test_targets shape:%s\n", Arrays.toString(test_targets.shape()));
Run the results:
train_features shape:[50193, 56]
train_targets shape:[50193, 3]
val_features shape:[1440, 56]
val_targets shape:[1440, 3]
test_features shape:[504, 56]
test_targets shape:[504, 3]