代码之家  ›  专栏  ›  技术社区  ›  Ben

如何在Deeplearning4J中创建培训和测试数据集?

  •  1
  • Ben  · 技术社区  · 7 年前

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

    中提供的所有示例 the documentation 以及 example code 使用A CSVSequenceRecordReader 读取csv文件。

    然后一个 DataSetIterator 是用创建的 SequenceRecordReaderDataSetIterator 并输入到 MultiLayerNetwork.fit() MultiLayerNetwork.evaluate() 方法(取决于它是一个训练或测试数据集迭代器)。

    但是,在我的例子中,我所拥有的数据集没有存储在csv文件中。我通过第三方库在线访问它,预处理它以获得 List<Data> 和A List<Labels> 物体。

    我怎样才能:

    1)创建 数据记录器 从我的两个名单?

    2)拆分 数据记录器 在训练和测试中?

    编辑 :

    我觉得我的问题太宽泛了。让我试着缩小范围。

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

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

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

    此外,据我所知,使用这种方法还意味着只有一个巨大的数据集,没有小批量。

    我还想我可以通过使用 batchBy(int num) 方法。但此方法返回数据集列表,而不是数据集迭代器…iteratewithminibatches()不会返回数据集迭代器,但当我查看源文件时,它返回空值,已弃用。然后我试着看看是否有一个我可以使用的数据集生成器的实现,但是有很多实现。我尝试了basedataseterator,但它不采用dataset作为构造函数参数,而是使用datasetvecher…又一层。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   fkajzer    7 年前

    1)

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

    如果你有 List<Data> object 你可以先把它映射到 double[] featureVector 和A double[] labelVector 然后创建一个 列表数据集编辑器 这样地

        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);

    推荐文章