基本问题是尝试使用自定义数据模型来创建要在deeplearning4j网络中使用的DataSetIterator。
我正在尝试使用的数据模型是一个java类,它包含一堆双精度数,由特定股票的报价创建,例如时间戳,开盘价,收盘价,高价,低价,成交量,技术指标1,技术指标指标2等 我查询了一个互联网资源,example,(也来自同一网站的其他几个指标)提供了我转换成我的数据模型的json字符串,以便于访问和存储在sqlite数据库中。
现在我有一个这些数据模型的列表,我想用它来训练LSTM网络,每个都是一个功能。根据Deeplearning4j文档和几个示例,使用训练数据的方法是使用描述here的ETL过程来创建一个DataSetIterator,然后由网络使用。
我没有看到使用任何提供的RecordReader转换我的数据模型的简洁方法,而没有先将它们转换为其他格式,例如CSV或其他文件。我想避免这种情况,因为它会占用大量资源。似乎有更好的方法来做这个简单的案例。有没有更好的方法,我只是缺少?
答案 0 :(得分:1)
deeplearning4j创建者在这里。
除了所有 very 特殊设置之外,您不应该创建数据集迭代器。你应该使用datavec。我们在很多地方介绍了这一点,从我们的数据vec页面到我们的示例: https://deeplearning4j.org/datavec https://github.com/deeplearning4j/dl4j-examples
Datavec是我们用于进行数据转换的专用库。您可以为您的用例创建自定义记录阅读器。由于遗留原因,Deeplearning4j对某些数据集有一些“特殊”迭代器。其中许多是在datavec存在之前发生的。我们构建了datavec作为预处理数据的方法。
现在使用RecordReaderDataSetIterator,SequenceRecordReaderDataSetIterator(有关更多信息,请参阅我们的javadoc)及其多数据集等效项。
如果这样做,您不必担心屏蔽,线程安全或任何其他涉及快速加载数据的事情。
顺便说一句,我很想知道你在哪里创建自己的迭代器,我们现在在自述文件中没有这样做。如果你看到的另一个地方并不明显,我们很乐意解决这个问题。