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 行。必须在某个地方进行标准化,以便我们能够为您执行某些任务,例如批处理。
如果我想从双精度数组加载数据集(例如 {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 行。必须在某个地方进行标准化,以便我们能够为您执行某些任务,例如批处理。