我有一个由 R 中的 nnet 包训练的(大型)神经网络。我希望能够模拟来自这个神经网络的预测,并使用我之前成功使用过的类似 foreach 的东西以并行方式进行(全部在 Windows 机器上)。
我的代码本质上是这种形式
library(nnet)
data = data.frame(out=c(0, 0.1, 0.4, 0.6),
in1=c(1, 2, 3, 4),
in2=c(10, 4, 2, 6))
net = nnet(out ~ in1 + in2, data=data, size=5)
library(doParallel)
registerDoParallel(cores=detectCores()-2)
results = foreach(test=1:10, .combine=rbind, .packages=c("nnet")) %dopar% {
result = predict(net, newdata = data.frame(in1=test, in2=5))
return(result)
}
除非拟合和预测更大的NN;大约 300MB。
上面的代码在使用传统的 for 循环或使用 %do% 时运行良好,但在使用 %dopar% 时,所有正在使用的内核都会加载到内存中 - 每个内核大约 700MB。如果我运行它足够长的时间,一切最终都会爆炸。
查找了类似的问题后,我仍然不知道是什么原因造成的。省略“预测”部分可以让一切顺利进行。
如何让每个核心查找不变的“网络”而不是将其加载到内存中?还是不可能?