我有一个巨大的trainData,我想从中提取随机的子集(假设1000次),并使用它们来连续训练神经网络对象。是否可以使用neuralnet R包来实现。我的想法是这样的:
library(neuralnet)
for (i=1:1000){
classA <- 2000
classB <- 2000
dataB <- trainData[sample(which(trainData$class == "B"), classB, replace=TRUE),] #withdraw 2000 samples from class B
dataU <- trainData[sample(which(trainData$class == "A"), classA, replace=TRUE),] #withdraw 2000 samples from class A
subset <- rbind(dataB, dataU) #bind them to make a subset然后输入实际trainData的这个子集来一次又一次地训练神经网络对象,如下所示:
nn <- neuralnet(formula, data=subset, hidden=c(3,5), linear.output = F, stepmax = 2147483647) #use that subset for training the neural network
}我的问题是,这个名为nn的神经网络对象会在每次循环迭代中进行训练吗?当循环结束时,我会得到一个完全训练过的神经网络对象吗?其次,在神经网络不能收敛于特定子集的情况下,不收敛的影响是什么?会不会影响预测结果?
发布于 2016-09-20 21:39:00
最简短的答案--不
更微妙的答案-某种程度上...
为什么?-因为neuralnet::neuralnet函数的设计不是为了在weights中不能到达threshold时返回stepmax。但是,如果到达threshold,则结果对象将包含最终的weights。然后,可以将这些weights作为startweights参数提供给neuralnet函数,从而允许后续学习。您的呼叫将如下所示:
# nn.prior = previously run neuralnet object
nn <- neuralnet(formula, data=subset, hidden=c(3,5), linear.output = F, stepmax = 2147483647, startweights = nn.prior$weights)然而,我最初的回答是‘否’,因为选择一个threshold来从一个子集中获取适量的信息,同时还要确保它在stepmax之前“收敛”,这可能是一个猜测游戏,而且不是很客观。
我基本上可以想到四种选择:
找到另一个包,允许这个explicitly
neuralnet源代码,并修改它以返回weights,即使没有达到‘收敛’(例如,到达一个适当大小的随机子集,然后在此基础上构建模型并测试其性能)。(这实际上是很常见的做法)。发布于 2018-01-16 15:58:20
我建议使用k-折叠验证来训练许多使用库(E1071)和调优函数的网络。
https://stackoverflow.com/questions/39577629
复制相似问题