首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时关闭DL4J INDArrays

何时关闭DL4J INDArrays
EN

Stack Overflow用户
提问于 2020-09-14 12:44:16
回答 1查看 117关注 0票数 1

我创建了一个定制的DataSetIterator。它的工作方式是在next方法中随机生成两个nexts(一个用于输入,一个用于输出),并在其中创建一个DataSet

代码语言:javascript
复制
int[][] inputArray = new int[num][NUM_INPUTS];
int[][] expectedOutputArray = new int[num][];

for (int i = 0; i < num; i++) {//just fill the arrays with some data
    int sum = 0;
    int product = 1;
    for (int j = 0; j < inputArray[i].length; j++) {
        inputArray[i][j] = rand.nextInt();
        sum += inputArray[i][j];
        product *= inputArray[i][j];
    }
    expectedOutputArray[i] = new int[] { sum, product, sum / inputArray[i].length };
}

INDArray inputs = Nd4j.createFromArray(inputArray);//never closed
INDArray desiredOutputs = Nd4j.createFromArray(expectedOutputArray);//never closed
return new DataSet(inputs, desiredOutputs);

但是,INDArray实现了AutoClosablejavadoc for close() states

此方法释放此INDArray实例所使用的独占堆外资源。如果INDArray依赖共享资源,则会抛出异常,请注意:此方法无论如何都不安全。

我需要关闭INDArrays?吗?

如果是的话,什么时候需要关闭INDArrays??

我尝试使用了一个使用资源的尝试,但是当在INDArray方法中使用它时,它抛出了一个异常,因为它是关闭的。

documentation of createFromArray(int[][])似乎没有解释这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-15 06:05:21

你真的不需要关闭它们。我们使用javacpp自动处理这个问题。您可以选择关闭它们,但是AutoCloseable是为那些希望更好地控制ndarray内存管理的人实现的。

编辑: Javacpp是我们用来连接到我们维护的用c++和其他库编写的本机库的底层原生集成。我们所有的计算和数据都基于本机代码和堆外内存。close()迫使我们更快地分配那些缓冲区。不过,Javacpp已经内置了自动去分配功能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63884593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档