【问题标题】:Is an Averaged neural network (avNNet) the average from all iterations?平均神经网络 (avNNet) 是所有迭代的平均值吗?
【发布时间】:2019-02-12 19:59:45
【问题描述】:

我在 R 中用 Caret 拟合了一个平均神经网络。请参阅下面的代码。平均一词是否意味着平均值基于 1000 个神经网络的结果? (因为在这种情况下有 1000 次迭代)

谢谢。

library(AppliedPredictiveModeling)
data(solubility)

### Create a control funciton that will be used across models. We
### create the fold assignments explictily instead of relying on the
### random number seed being set to identical values.

library(caret)
set.seed(100)
indx <- createFolds(solTrainY, returnTrain = TRUE)
ctrl <- trainControl(method = "cv", index = indx)

################################################################################
### Section 7.1 Neural Networks

### Optional: parallel processing can be used via the 'do' packages,
### such as doMC, doMPI etc. We used doMC (not on Windows) to speed
### up the computations.

### WARNING: Be aware of how much memory is needed to parallel
### process. It can very quickly overwhelm the availible hardware. We
### estimate the memory usuage (VSIZE = total memory size) to be 
### 2677M/core.

library(doMC)
registerDoMC(10)


library(caret)

nnetGrid <- expand.grid(decay = c(0, 0.01, .1), 
                        size = c(1, 3, 5, 7, 9, 11, 13), 
                        bag = FALSE)

set.seed(100)
nnetTune <- train(x = solTrainXtrans, y = solTrainY,
                  method = "avNNet",
                  tuneGrid = nnetGrid,
                  trControl = ctrl,
                  preProc = c("center", "scale"),
                  linout = TRUE,
                  trace = FALSE,
                  MaxNWts = 13 * (ncol(solTrainXtrans) + 1) + 13 + 1,
                  maxit = 1000,
                  allowParallel = FALSE)
nnetTune

plot(nnetTune)

testResults <- data.frame(obs = solTestY,
                          NNet = predict(nnetTune, solTestXtrans))

################################################################################

另见:

https://scientistcafe.com/post/nnet.html

【问题讨论】:

    标签: r neural-network r-caret nnet


    【解决方案1】:

    avNNet 是一个模型,其中相同的神经网络模型使用不同的随机数种子进行拟合。所有生成的模型都用于预测。对于回归,每个网络的输出是平均的。对于分类,首先对模型分数进行平均,然后将其转换为预测类别。 Source.

    拟合模型的数量由参数repeats 控制,该参数通过... 传递给caret 中的模型

    repeats - the number of neural networks with different random number seeds。默认设置为5。因此将平均五个模型。在caret's definition of the model 我看不到这种变化。

    如果bag 参数设置为TRUE 模型拟合和聚合由bootstrap aggregation 执行,在我看来,如果模型数量足够多,几乎可以保证提供更好的预测性能。

    【讨论】:

    • @滥用谢谢!由于“所有生成的模型都用于预测”是模型的基础数量 5 * 1000 = 5000?我将添加引导聚合。
    • 模型数量为5,如果repeats = 5maxit = 1000 只是权重更新的次数。在构建一个模型期间。
    • @misuse 我理解正确吗,有 5 个模型,每个模型有 1000 个权重更新和 x 个随机数种子?
    • 是的,每个 nnet 都以随机初始化权重开始(大部分时间),然后通过连续更新(反向传播)训练这些权重。这里 1000 是一个模型的最大迭代次数或权重更新次数 - 模型拟合可以根据 abstol and reltol arguments 提前停止。无论如何,1000 次更新似乎过多,而 5 种模型似乎很低,我会使用 bagging 使用 200 多个模型进行 100 - 200 次更新。
    • 我不确定不使用 bagging 的意义何在,因为大多数时候这些 nnet 会得出一个非常相似的解决方案。另请查看keras,它允许使用更多架构和更复杂的算法。
    猜你喜欢
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2022-01-04
    • 2021-10-10
    相关资源
    最近更新 更多