当前位置: 首页 > 知识库问答 >
问题:

如何使用带有Deeplearning4J的自定义数据模型?

沈乐邦
2023-03-14

基本问题是试图使用自定义数据模型来创建用于deeplearning4j网络的DataSetIterator。

我试图使用的数据模型是一个java类,它包含一系列双打,这些双打是从特定股票的报价中创建的,例如时间戳、打开、关闭、高、低、卷、技术指标1、技术指标2等。我查询了一个internet源示例(也是来自同一站点的其他几个指标),它提供了json字符串,我将这些字符串转换为我的数据模型,以便于访问和存储在sqlite数据库中。

现在我有了这些数据模型的列表,我想用它们来训练LSTM网络,每个double都是一个特性。根据Deeplearning4j文档和几个示例,使用训练数据的方法是使用这里描述的ETL过程来创建DataSetIterator,然后由网络使用。

我没有看到一种干净的方法来使用提供的任何RecordReaders转换我的数据模型,而不首先将它们转换为其他格式,如CSV或其他文件。我想避免这一点,因为这将消耗大量资源。似乎有更好的方法来处理这个简单的案子。有没有一个更好的方法,我只是错过了?

共有1个答案

席兴平
2023-03-14

伊森!

首先,Deeplearning4j使用ND4j作为后端,因此数据最终必须转换为Indarray对象才能在模型中使用。如果三角化数据是两个数组:inputsarraydesiredoutputsarray,则可以执行以下操作:

INDArray inputs = Nd4j.create(inputsArray, new int[]{numSamples, inputDim});
INDArray desiredOutputs = Nd4j.create(desiredOutputsArray, new int[]{numSamples, outputDim});

然后您可以直接使用这些向量来训练您的模型:

for (int epoch = 0; epoch < nEpochs; epoch++)
    model.fit(inputs, desiredOutputs);
DataSet ds = new DataSet(inputs, desiredOutputs);
for (int epoch = 0; epoch < nEpochs; epoch++)
    model.fit(ds);
public class MyCustomIterator implements DataSetIterator {
    private INDArray inputs, desiredOutputs;
    private int itPosition = 0; // the iterator position in the set.

    public MyCustomIterator(float[] inputsArray,
                            float[] desiredOutputsArray,
                            int numSamples,
                            int inputDim,
                            int outputDim) {
        inputs = Nd4j.create(inputsArray, new int[]{numSamples, inputDim});
        desiredOutputs = Nd4j.create(desiredOutputsArray, new int[]{numSamples, outputDim});
    }

    public DataSet next(int num) {
        // get a view containing the next num samples and desired outs.
        INDArray dsInput = inputs.get(
            NDArrayIndex.interval(itPosition, itPosition + num),
            NDArrayIndex.all());
        INDArray dsDesired = desiredOutputs.get(
            NDArrayIndex.interval(itPosition, itPosition + num),
            NDArrayIndex.all());

        itPosition += num;

        return new DataSet(dsInput, dsDesired);
    }

    // implement the remaining virtual methods...

}
MyCustomIterator it = new MyCustomIterator(
    inputs,
    desiredOutputs,
    numSamples,
    inputDim,
    outputDim);

for (int epoch = 0; epoch < nEpochs; epoch++)
    model.fit(it);

这个示例对您特别有用,因为它实现了一个LSTM网络,并且有一个自定义迭代器实现(可以作为实现其余方法的指南)。此外,有关ndarray的更多信息,这也很有帮助。它提供了关于创建、修改和访问ndarray部分的详细信息。

 类似资料:
  • 我将Deeplearning4j(Ver.1.0.0-M1.1)用于构建神经网络。 我以Deeplearning4j中的IrisClassifier为例。 我怎么能得到预测? 萨克斯!

  • -以上代码自动生成ID。 如何将自定义ID的数据添加到火库?我的目的是创建自定义 ID 并将文本数据写入此集合。你可以帮我吗?谢谢。

  • 问题内容: 如果我要在数据库中定义某些功能(也许是Postgres或任何其他数据库): 我会从SQL中将其称为: 如何从Hibernate调用诸如此类的自定义函数? 问题答案: 如果要在HQL中使用自定义函数,则需要在相应的方言中定义它 看一下PostgreSQLDialect(或其他任何来源)的源代码,您会看到一堆registerFunction()调用。您需要再添加一个:-)-用于您自己的自定

  • 我试图使用OpenNLPJavaAPI从文档中提取名称、技能等实体。但它没有提取正确的名称。我使用opennlp源锻造链接上可用的模型 下面是一段java代码- 我想做的是: 我正在使用ApacheTika将PDF文档转换为纯文本文档 但它正在提取姓名和其他单词。它不是提取专有名称。如何创建自定义模型,从文档中提取游泳、编程等技能? 给我一些想法! 任何帮助都将不胜感激!?

  • 我试图用Spring Cloud Stream创建一个kafka使用者,以便监听在任何Spring上下文之外构建的kafka消息,并使用自定义头(operationType)。 我使用的是Spring Boot 1.5.x/Spring Cloud egdware.sr5和1.1.1版本的kafka-client和Kafka2.11。 我的侦听器类包含此方法 而operationType标头是存在