3

我在使用 caret 包和 RSNNS 包中的“mlpWeightDecay”方法指定学习率时遇到问题。“mlpWeightDecay”的调整参数是大小和衰减。

将大小保持为 4 并在 c(0,0.0001, 0.001, 0.002) 上调整衰减的示例:

data(iris)
TrainData <- iris[,1:4]
TrainClasses <- iris[,5]

fit1 <- train(TrainData, TrainClasses,
            method = "mlpWeightDecay",
            preProcess = c("center", "scale"),
            tuneGrid=expand.grid(.size = 4, .decay = c(0,0.0001, 0.001, 0.002)),
            trControl = trainControl(method = "cv")
)

但我也想操纵模型的学习率,而不仅仅是采用默认的 0.2 学习率。

我知道我可以通过“...”参数使用来自 RSNNS 的 mlpWeightDecay 方法的更多参数。“learnFuncParams”将是我需要插入的 RSNNS 参数。它需要 4 个参数(学习率、权重衰减、dmin、dmax)。

继续这个例子,它看起来像这样:

fit1 <- train(TrainData, TrainClasses,
    method = "mlpWeightDecay",
    preProcess = c("center", "scale"),
    tuneGrid=expand.grid(.size = 4, .decay = c(0,0.0001, 0.001, 0.002)),
    trControl = trainControl(method = "cv"),
    learnFuncParams=c(0.4,0,0,0)
)

但是插入符号训练函数的文档告诉我“...”参数:
传递给分类或回归例程(例如randomForest)的参数。如果在此处传递调整参数的值,则会发生错误。

问题是 4 个“learningFuncParams”参数之一(权重衰减)是一个调整参数。

因此,我收到错误和警告:

train.default(TrainData, TrainClasses, method = "mlpWeightDecay", : 无法确定最终调优参数另外:有50个或更多警告(使用warnings()查看前50个)

警告信息:

1:在 method$fit(x = if (!is.data.frame(x)) as.data.frame(x) else x, ... :在您传递的“learnFuncParams”参数中覆盖权重衰减值in. 保留其他值

2:在 eval(expr,envir,enclos)中:Fold01 的模型拟合失败:size=4,decay=0e+00 mlp.default 中的错误(x = structure(list(Sepal.Length = c(-0.891390168709482,:正式由多个实际参数匹配的参数“learnFuncParams”

如果两者都设置在相同的参数“learningFuncParams”中,如何设置学习率而不与调整参数“decay”发生冲突?

谢谢!

4

1 回答 1

1

看起来您可以在“...”中指定自己的 learnFuncParams。caret 检查您是否提供了自己的参数集,并且只会覆盖 learnFuncParams[3] (这是衰减)。它将采用您提供的 learnFuncParams[1,2,4]。

找出插入符号的作用的一种非常方便的方法是键入 getModelInfo("mlpWeightDecay"),然后向上滚动到 $mlpWeightDecay$fit 部分。它显示了插入符号将如何调用真正的训练函数:

$mlpWeightDecay$fit
    if (any(names(theDots) == "learnFuncParams")) {
        prms <- theDots$learnFuncParams
        prms[3] <- param$decay
        warning("Over-riding weight decay value in the 'learnFuncParams' argument you passed in. Other values are retained")
    }

它会检查您是否提供了自己的 learnFuncParams。如果你这样做了,它会使用它,但会插入它自己的衰减。您可以忽略警告。

我认为您遇到的错误(“无法确定最终调整参数”)还有另一个原因。你试过降低学习率吗?

于 2014-09-04T19:39:35.703 回答