首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >神经网络中的连续训练

神经网络中的连续训练
EN

Stack Overflow用户
提问于 2016-09-20 00:15:43
回答 2查看 605关注 0票数 0

我有一个巨大的trainData,我想从中提取随机的子集(假设1000次),并使用它们来连续训练神经网络对象。是否可以使用neuralnet R包来实现。我的想法是这样的:

代码语言:javascript
复制
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的这个子集来一次又一次地训练神经网络对象,如下所示:

代码语言:javascript
复制
nn <- neuralnet(formula, data=subset, hidden=c(3,5), linear.output = F, stepmax = 2147483647) #use that subset for training the neural network
}

我的问题是,这个名为nn的神经网络对象会在每次循环迭代中进行训练吗?当循环结束时,我会得到一个完全训练过的神经网络对象吗?其次,在神经网络不能收敛于特定子集的情况下,不收敛的影响是什么?会不会影响预测结果?

EN

回答 2

Stack Overflow用户

发布于 2016-09-20 21:39:00

最简短的答案--不

更微妙的答案-某种程度上...

为什么?-因为neuralnet::neuralnet函数的设计不是为了在weights中不能到达threshold时返回stepmax。但是,如果到达threshold,则结果对象将包含最终的weights。然后,可以将这些weights作为startweights参数提供给neuralnet函数,从而允许后续学习。您的呼叫将如下所示:

代码语言:javascript
复制
# 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

  • Get
  1. neuralnet源代码,并修改它以返回weights,即使没有达到‘收敛’(例如,到达一个适当大小的随机子集,然后在此基础上构建模型并测试其性能)。(这实际上是很常见的做法)。
  2. 获取你所有的子集,在每个子集上建立一个模型,并考虑将它们组合成一个‘集成’模型。
票数 1
EN

Stack Overflow用户

发布于 2018-01-16 15:58:20

我建议使用k-折叠验证来训练许多使用库(E1071)和调优函数的网络。

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

https://stackoverflow.com/questions/39577629

复制
相关文章

相似问题

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