DL4J 加载数组的数组作为数据集

DL4J Load Array of Arrays as DataSet

如果我想从双精度数组加载数据集(例如 {1, 2, 3, 4} 在带有 DL4j 的文本文件中,我使用此代码:

int numLinesToSkip = 0;
                char delimiter = ',';
                String filePath = "data.txt";
                File file = new File(filePath);
                Path path = file.toPath();
                RecordReader recordReader = new CSVRecordReader(numLinesToSkip, delimiter);
            
                recordReader.initialize(new FileSplit(file));
                int variables = 2;
                int labelIndex = 50;
                int numClasses = variables;
                int batchSize = (int) lineCount;

                DataSetIterator iterator = new RecordReaderDataSetIterator(recordReader, batchSize, labelIndex, numClasses);
                
                DataSet allData = iterator.next();
                allData.shuffle();
//DataSet is now created

我想做同样的事情,但使用 3D 数组,例如:{{1, 1, 1,}{2, 2, 2}{3,4,5}{6, 6, 6}}

我可以随心所欲地格式化文件。我只是希望能够为每个项目加载一个数组而不是单个双精度数组 - 换句话说,一个数组数组,而不是一个双精度数组。

也可以使用 2 个 INDArray 创建数据集。 如果你只是想跳过使用 CSV 而只是使用你自己的数组,你可以这样做:

INDArray yourInput = Nd4j.create(double[][]);
INDArray yourLabels = Nd4j.create(double[][]);
DataSet d = new DataSet(yourInput,yourLabels);

通常,您使用的抽象假设每个都是一行。如果你打算尝试做 2d,唯一的用例通常是时间序列。否则我们强制执行 1 行,因为在 training/inference 时间设置批量大小是惯例。为了使用该批量大小,我们不能真正允许超过 1 行。必须在某个地方进行标准化,以便我们能够为您执行某些任务,例如批处理。