deeplearning4j - 如何在deeplearning4j中创建训练和测试DataSetIterators?

标签 deeplearning4j

我正在使用 deeplearning4j 构建循环神经网络,我需要创建训练和测试数据集。

the documentation 中提供的所有示例和 example code ,使用CSVSequenceRecordReader读取 CSV 文件。

然后是DataSetIterator使用 SequenceRecordReaderDataSetIterator 创建构造函数并输入 MultiLayerNetwork.fit()MultiLayerNetwork.evaluate()方法(取决于它是训练数据集迭代器还是测试数据集迭代器)。

但是,就我而言,我拥有的数据集未存储在 CSV 文件中。我通过第三方库在线访问,预处理得到一个List<Data>和一个 List<Labels>对象。

我怎样才能:

1) 创建DataSetIterator从我的两个列表中?

2) 拆分DataSetIterator在训练集和测试集中?

编辑:

我认为我的问题太宽泛了。让我尝试缩小范围。

我已经开始阅读this article它使用非常简单的方法来创建数据集:

它创建两个 INDArray,并使用 DataSet(INDArray first, INDArray second) 从它们构建一个 DataSet。构造函数。

使用 network.fit(dataSet); 训练数据工作,但我无法在训练时评估它,如方法evaluate需要数据集迭代器,而不是数据集。

而且,据我了解,使用这种方法也意味着只有一个巨大的数据集,没有小批量。

我还猜测我可以使用batchBy(int num)从这个大数据集中创建小批量。方法。但此方法返回数据集列表,而不是数据集迭代器... iterateWithMiniBatches() 确实返回数据集迭代器,但当我查看源文件时,它返回 null 并且已弃用。然后我尝试查看是否有我可以使用的 DataSetIterator 的实现,但有很多。我尝试了 BaseDataSetIterator,但它不采用 DataSet 作为构造函数参数,而是采用 DataSetFetcher...又是一层。

是否有一个示例演示如何在不使用默认记录读取器的情况下创建数据集?或者我应该创建记录读取器的实现方式?

最佳答案

1)

MultiLayerNetwork.evaluate()接受 ListDataSetIterator作为参数

如果您有 List<Data> object你可以先将它映射到 double[] featureVector和一个 double[] labelVector然后创建一个ListDataSetIterator像这样

    INDArray x = Nd4j.create(featureVector, new int[]{featureVector.length/numberOfFeatures, numberOfFeatures}, 'c');
    INDArray y = Nd4j.create(labelVector, new int[]{labelVector.length/numberOfLabels, numberOfLabels}, 'c');

    final DataSet allData = new DataSet(x,y);

    final List<DataSet> list = allData.asList();

    ListDataSetIterator iterator = new ListDataSetIterator(list);

对于 2),您应该只创建两个单独的迭代器,一个用于训练,一个用于测试。

然后您可以使用 net.evaluate(testIterator); 评估您的网络

关于deeplearning4j - 如何在deeplearning4j中创建训练和测试DataSetIterators?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54020352/

相关文章:

java - Deeplearning4j org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException

java - CSVRecordReader 和 CSV 行末尾未终止的引用字段

java - Ant build.xml 与 Deeplearning4j 和 Lux Delux

java - 余弦相似度始终为 1.0

java - 如何将 deeplearning4j Word2vec 与 Spark 结合使用?

java - 找不到符号 AudioSynthesizer deeplearning4j 示例

java - 迭代DataSet Iterator并添加到DataSet中

java - 运行 deeplearning4J 示例时出现问题

java - 如何通过 dl4j 正确使用我的神经网络?

java - 如何将 INDArray 列表存储在文件中